1. 程式人生 > >Android基本控制元件使用

Android基本控制元件使用

1.TextView配置

  <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:gravity="center"

        android:layout_weight="1"

        android:textSize="24sp"
        android:textColor="#00ff00"
        android:text="This is TextView" />

 layout_width和layout_height屬性可選值有:match_parent(當前控制元件的大小和父佈局的大小一樣)

                                                                                rap_content(讓當前控制元件的大小能夠剛好包含住裡面的內容)

gravity屬性選擇center表示文字在垂直和水平方向都居中對齊

textSize屬性指定文字的大小

textColor屬性指定文字的顏色

2.Button

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"                                   //相對於佈局,居中
        android:layout_margin="5dip"                                     //指定控制元件在上下左右方向上偏移的距離
        android:background="@drawable/back_bg"            //用於為佈局或控制元件指定一個背景
        android:text="Back"
        android:textColor="#fff"
        />

     實現對按鈕點選事件的監聽方法有兩種:

    (1)使用匿名類,在onCreate中實現:

public class MainActivity extends Activity
{
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener()


        {
            @Override
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                
            }
        });
    }

}

    (2)實現介面

public class MainActivity extends Activity implements View.OnClickListener
{
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(this);

    }

    @Override
    public void onClick(View v)
    {
        // TODO Auto-generated method stub
        switch (v.getId())
        {
            case R.id.button:
                Toast.makeText(MainActivity.this, "MainActivity", Toast.LENGTH_LONG).show();
                break;

            default:
                break;
        }
    }

}

    必須實現 implements View.OnClickListener,不能是 implements OnClickListener,不然會出錯。

3.EditText

    它允許使用者在控制元件裡輸入和編輯內容,並可以在程式中對這些內容進行處理。

    <EditText
        android:id = "@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/button"                     //保證不與上面的button重疊
        android:hint="Type something here"                   //輸入框的提示性文字
        android:maxLines="2"                                           //指定了EditText的最大行數為兩行,這樣當輸入的內容超過兩行時,文字就會向上滾動,而EditText則不會繼續拉伸
        />

4.ImageView

<ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height= "wrap_content"
        android:layout_below="@id/edit_text"
        android:src="@drawable/ic_launcher"
        />

點選按鈕,改變顯示的圖片

private ImageView imageView;

 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        imageView = (ImageView)findViewById(R.id.image_view);
       
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                imageView.setImageResource(R.drawable.image1);
            }
        });
    }

首先需要在res/drawable-hdpi下新增圖片,但是這個資料夾下所有圖片的名字必須是 [a-z0-9_.],否則無法識別、

5.ProgressBar

(1)圓形進度條

<ProgressBar
        android:id = "@+id/progress_bar"
        android:layout_width = "match_parent"
        android:layout_height="wrap_content"
        />

改變控制元件的可見屬性:visible(可見),invisible(不可見,但仍然佔據位置和大小),gone(不可見,不佔據位置和大小)

   private ProgressBar progressBar;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        editText = (EditText)findViewById(R.id.edit_text);
        imageView = (ImageView)findViewById(R.id.image_view);
        progressBar = (ProgressBar)findViewById(R.id.progress_bar);
        //按鍵按下改變其可見屬性
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(progressBar.getVisibility() == View.GONE)
                {
                    progressBar.setVisibility(View.VISIBLE);
                }
                else
                {
                    progressBar.setVisibility(View.GONE);
                }
            }
        });
    }

(2)水平進度條

    <ProgressBar
        android:id = "@+id/progress_bar"
        android:layout_width = "match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/image_view"
        style = "?android:attr/progressBarStyleHorizontal"
        android:max = "100"
        />

        按下按鍵時,進度條變化

        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                int progress = progressBar.getProgress();
                progress = progress + 10;
                if(progress > 100)
                {
                    progress = 0;
                }
                progressBar.setProgress(progress);
                
            }
        });

6.AlertDialog(警告對話方塊)

        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                AlertDialog.Builder  dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("This is Dialog");                                                      //標題
                dialog.setMessage("Something improtant.");                               //內容
                dialog.setCancelable(false);                                                            //不可取消,一定得進行處理
                //OK鍵的點選事件
                dialog.setPositiveButton("OK", new DialogInterface.OnClickListener()
                {
                    
                    @Override
                    public void onClick(DialogInterface arg0, int arg1)
                    {
                        // TODO Auto-generated method stub
                        
                    }
                });
                //Cancle鍵的點選事件
                dialog.setNegativeButton("Cancle", new DialogInterface.OnClickListener()
                {
                    
                    @Override
                    public void onClick(DialogInterface arg0, int arg1)
                    {
                        // TODO Auto-generated method stub
                        
                    }
                });
                dialog.show();
            }
        });

7.ProcessDialog

按鍵按下顯示對話方塊

        button.setOnClickListener(new OnClickListener()9
        {
            @Override
            public void onClick(View v)
            {
                ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setTitle("This is a progressDialog");
                progressDialog.setMessage("Loading.....");
                progressDialog.setCancelable(true);                           //可關閉
                progressDialog.show();

          }

      }

若progressDialog.setCancelable(false);如此配置,表示progressDialog是不能通過Back鍵取消的,這是一定要在程式碼中做好控制,當資料載入完成後,必須要呼叫 progressDialog.dismiss();方法來關閉對話方塊,否則ProgressDialog將會一直存在。

8.ListView的簡單用法

(1)在activity_main.xml佈局中加入ListView控制元件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.listviewtest.MainActivity" >

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>


</RelativeLayout>

(2)在MainActivity.java中新增與ListView有關的程式碼

public class MainActivity extends Activity
{
    private String[] data = {"Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple",
            "Strawberry", "Cherry", "Mango"};

    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);
        ListView listView  = (ListView)findViewById(R.id.list_view);
        listView.setAdapter(adapter);

    }

}

陣列中的資料無法直接傳遞給ListView,需藉助介面卡完成,通過泛型<String>.來指定要適配的資料型別,然後在建構函式中把要適配的資料傳入即可

將ArrayAdapter的泛型指定為String,然後在ArrayAdapter的建構函式中一次傳入當前上下文、ListView子項佈局的id以及要適配的資料。

在這裡我們使用 android.R.layout.simple_list_item_1作為ListView子項佈局的id,這是一個Android內建的佈局檔案,裡面只有一個TextView,可用於簡單顯示一段文字

最後呼叫ListView的setAdapter方法,將構建好的介面卡物件傳遞進去即可。

9.ListView介面定製

(1)定義一個實體類Fruit.java,作為ListView介面卡的適配型別

package com.example.listviewtest;

import org.w3c.dom.NameList;

public class Fruit
{
    private String name;
    private int imageId;
    
    public Fruit(String name, int imageId)
    {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.imageId = imageId;
    }
    
    public String getName()
    {
        return name;
    }
    
    public int getImageId()
    {
        return imageId;
    }
}
(2)為ListView的子項指定一個我們自定義的佈局layout/fruit_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ImageView                                                                   //用於顯示水果的圖片
        android:id="@+id/fruit_imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    
    <TextView                                                                       //用於顯示水果的名字
        android:id="@+id/fruit_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="10dip"
        />
</LinearLayout>

(3)建立一個自定義的介面卡(FruitAdapter.java)

a.低效率
public class FruitAdapter extends ArrayAdapter<Fruit>
{
    private int resourceId;
    
    //重寫建構函式,用於將上下文,ListView子項佈局的id和資料都傳遞進來
    public FruitAdapter(Context context, int resource, List<Fruit> objects)
    {
        super(context, resource, objects);
        resourceId = resource;
    }
    
    //當每個子項被滾動到螢幕內的時候被呼叫,即蘋果的時候呼叫一次,香蕉的時候再呼叫一次,使得執行效率低
    @Override
    public View getView(int position, View convertView, ViewGroup parent)     //
    {
        Fruit fruit = getItem(position);//獲得當前項的fruit例項
        //載入ListView子項佈局
        View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        //設定具體顯示資訊
        ImageView fruitImage = (ImageView)view.findViewById(R.id.fruit_imageView);
        TextView fruitName = (TextView)view.findViewById(R.id.fruit_textView);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
        
    }
    
}

b.高效率

public class FruitAdapter extends ArrayAdapter<Fruit>
{
    private int resourceId;
    
    //重寫建構函式,用於將上下文,ListView子項佈局的id和資料都傳遞進來
    public FruitAdapter(Context context, int resource, List<Fruit> objects)
    {
        super(context, resource, objects);
        resourceId = resource;
    }
    
    //當每個子項被滾動到螢幕內的時候被呼叫
    @Override
    //三個引數分別表示:判斷顯示在介面上的是第幾個;

    //將之前載入好的佈局進行快取,以便之後再進行重用
    //載入xml檢視時使用
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Fruit fruit = getItem(position);//獲得當前項的fruit例項
        //載入ListView子項佈局
        View view;
        ViewHolder viewHolder;      //這個類用於對控制元件的例項進行快取
        if(convertView == null)
        {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage = (ImageView)view.findViewById(R.id.fruit_imageView);
            viewHolder.fruitName = (TextView)view.findViewById(R.id.fruit_textView);
            view.setTag(viewHolder);    //將viewHolder儲存在View中
        }
        else
        {
            view = convertView;
            viewHolder = (ViewHolder)view.getTag();      //將view中儲存的viewHolder提取出來即可
        }
        //設定具體顯示資訊
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;
        
    }
    //用於對控制元件的例項進行快取
    class ViewHolder
    {
        ImageView fruitImage;
        TextView fruitName;
        
    }
    
}

(4)MainActivity中呼叫

public class MainActivity extends Activity
{
    private List<Fruit> fruitList = new ArrayList<Fruit>();
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits();
        FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);
        ListView listView = (ListView)findViewById(R.id.list_view);
        listView.setAdapter(adapter);
    }
    
    private void initFruits()
    {
        Fruit apple = new Fruit("Apple", R.drawable.apple_pic);
        fruitList.add(apple);
        Fruit banana = new Fruit("Banana",R.drawable.banana_pic);
        fruitList.add(banana);
        Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
        fruitList.add(orange);
    }

}

(5)ListView的點選事件

listView.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id)
            {
                Fruit fruit = fruitList.get(position);
                Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_LONG).show();
                // TODO Auto-generated method stub
            }
        });

相關推薦

Android介面程式設計——Android基本控制元件

 Android介面程式設計 Android應用開發的一項重要內容就是介面開發。對於使用者來說,不管APP包含的邏輯多麼複雜,功能多麼強大,如果沒有提供友好的圖形互動介面,將很難吸引終端使用者。

Android基本控制元件使用

1.TextView配置   <TextView         android:id="@+id/text_view"         android:layout_width="match_parent"         android:layout_heigh

Android 基本控制元件使用六(ListView+SimpleAdapter)

專案技術:利用 ListView + SimpleAdapter 將 name 和 number 顯示出來,   通過給 item 設定監聽(setOnItemClickListener)土司“ name 和 number ” 專案描述:通過 ListView+Simple

Android 基本控制元件的使用二(註冊許可協議)(CheckBox)

需要注意的是:按鈕部分,在複選框選中之前是顯示不可點選狀態,一旦被選中之後就會變成可點選按鈕。 為複選框設定的監聽為:setOnCheckedChangeListener 實現的方法有兩種: 方法一:在 activity_main.xml 中 <Button  

android基本控制元件-textview

安卓應用是由許多控制元件組成的,這些控制元件都直接或間接繼承View類.就像微軟的winform程式一樣,這些控制元件也有一系列的事件機制.textview 就是非常常見的控制元件.用來顯示文字,個人

Android 基本控制元件的使用三(RadioButton)

RadioButton是單選按鈕,即若干個單選按鈕中只能選擇其中的某一個選項, 如果需要若干個單選按鈕實現互斥效果,則這些單選按鈕必須是同一個RadioGroup的子級控制元件。 RadioGroup的本質是LinearLayout,在設計時,需要為RadioGroup新

Android-基本控制元件(Spanner 下拉列表)

1.回顧    上篇 學會了 GridView 的使用,基本的SimapleAdapter 實現 2.這篇     (1)使用 SimapleAdapter 實現 圖文下拉列表     (2) 使用A

Android 基本控制元件的使用一(使用者的登入介面)

用到了三個基本控制元件分別是: TextView(文字框); EditText (輸入框); Button  (按鈕); activity_main.xml 中的程式碼 <LinearLayoutxmlns:android="http://schemas.a

Android 基本控制元件的使用五(ListView 與 ArrayAdapter)

專案技術:通過 adapter 來把資料顯示出來, 顯示這樣一個介面: 開發過程: 1.在佈局中建立一個 ListVIew (用來呈現資料的) 2.在佈局中建立一個item(每一項的顯示方式) 3.宣告 ListView 4.建立 ArrayList 並 新增資料 5.

Android常用的基本控制元件

在搭建Android介面中 有許多的控制元件給我們使用,有TextView,ImageView,Button等等,正是有了這些控制元件,我們才能搭建出好看的介面框架,本篇主要講解一下基本控制元件的屬性,以及在專案中常用的一些Android自帶的控制元件。 所有控制元件必須要有的屬性:

Android入門——基本控制元件詳解

Android應用開發的一項重要內容就是介面開發。對於使用者來說,不管APP包含的邏輯多麼複雜,功能多麼強大,如果沒有提供友好的圖形互動介面,將很難吸引終端使用者。作為一個程式設計師如何才能開發出友好的圖形介面呢。實際上Android提供了非常豐富UI(User Interface)控制元

Android Studio的基本控制元件 圖片框與進度條

今日重點: 1. Toast(吐絲框); 2. ImageView; 3. ProgressBar (進度條); 4. 如何讓子執行緒成功連線主執行緒(重點)。 技術分點 Toast(吐絲框); 1.1 Toast是Android

Android開發之基本控制元件和詳解四種佈局方式

Android中的控制元件的使用方式和iOS中控制元件的使用方式基本相同,都是事件驅動。給控制元件新增事件也有介面回撥和委託代理的方式。今天這篇部落格就總結一下Android中常用的基本控制元件以及佈局方式。說到佈局方式Android和iOS還是區別挺大的,在iOS中有F

Android開發的之基本控制元件和詳解四種佈局方式

Android中的控制元件的使用方式和iOS中控制元件的使用方式基本相同,都是事件驅動。給控制元件新增事件也有介面回撥和委託代理的方式。今天這篇部落格就總結一下Android中常用的基本控制元件以及佈局方式。說到佈局方式Android和iOS還是區別挺大的,在iOS中有Frame絕對佈局和AutoL

android常用控制元件ViewPager(一) ViewPager基本應用

ViewPager這個控制元件主要是用來實現螢幕之間的滑動切換(當然這樣的控制元件也可以完全自己打造)它是google SDk中自帶的一個附加包的一個類。現在很多應用都運用了ViewPager這樣的效果。本篇先介紹ViewPager的基本功能。 ViewP

幾種Android表格控制元件

一、LockTableView GitHub:https://github.com/RmondJone/LockTableView 有基本功能(顯示資料),有上拉下拉,有點選事件,但其它功能(如新增按鈕等)需要二次開發。   二、PanelList GitHub:https://

duilib中將xml封裝為控制元件簡單示例(簡單自定義控制元件,封裝幾個基本控制元件合為1個自定義控制元件)

使用duilib的時候,難免會有這樣的需求: 某一塊Container(Layout)以及裡面的佈局需要重複用,不想每次都複製貼上這麼多,要不然xml太大了; 通過繼承來自定義一個控制元件,比如CButtonUIEx之類的,想讓他像button一樣在xml中被識別; xml裡面的東西

Android CardView控制元件

相關文章 Android Snackbar控制元件 Android FloatingActionButton控制元件 Android Toolbar控制元件 Android AppBarLayout控制元件 Android CollapsingToolbarLayout控制元件 Andr

Android ViewStub控制元件

前言 使用ViewStub可以實現介面的延遲載入。 1. ViewStub簡單應用 (1) 佈局檔案 layout為載入View,inflatedId為載入後View的id。 <ViewStub android:id="@+id/view_stub"

Android ViewPager控制元件

前言 ViewPager可以實現多個介面的左右滑動。 1. ViewPager簡單應用 (1) 佈局檔案 <android.support.v4.view.ViewPager android:id="@+id/view_pager" android: