Android View中的控件和監聽方法...


PS:居然三天沒寫博客了...今天補上...東西雖多,但是都是一些基礎...代碼多了一些,有人可能會這樣問,粘這么多代碼有毛用..其實對於一個Android的初學者來說,一個完整的代碼是最容易幫助理解的...我也是在一點一點的去學習...看了許多人的博客,大部分都是粘貼部分代碼,說實話,剛接觸的時候真的感覺不是很好理解...不知道其他地方如何去實現..只能自己慢慢的去摸索..我寫的這東西也不是給大神們去看的...大神一看就能明白怎么回事..因此我是站在初學者的立場上,才貼了這么多的代碼...好了,不廢話了...

學習內容:

1.基本控件的應用...

2.如何為組件綁定監聽事件...

i.Button 與 TextView組件與監聽事件 OnClickListener()

在這里我還是多用例子進行講解,還是比較清晰的...

這是xml文件:

<!--這里定義了四個組件,三個按鈕,一個文本顯示顯示組件..只是一些簡單的布局,沒什么新的東西,因此也就沒有必要講了,大家看看其實就懂..-->
<?xml version="1.0" encoding="utf-8"?>
<Linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >
    
    <textview
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginbottom="10dp"
        android:text="杜鵑不啼,如何讓它啼?"
        android:textsize="20sp" >
    </textview>

    <button
        android:id="@+id/Button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="殺之不足惜!"
        android:textsize="20sp" >
    </button>

    <button
        android:id="@+id/Button02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="誘之自然啼!"
        android:textsize="20sp" >
    </button>

    <button
        android:id="@+id/Button03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="待之莫須急!"
        android:textsize="20sp" >
    </button>
</Linearlayout>

下面是src下的MainActivity.java文件..比較簡單...沒什么難的東西...就是唯一在內部實現的時候大家有可能有點不太理解..

package com.example.android_view;

import android.os.Bundle;
import android.widget.Button;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickLisener; //OnClickListener是View的內部接口..
import android.widget.TextView;
public class MainHelloButton extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 實現一個多按鈕可用的單擊監聽器對象,這個地方是在內部實現這個方法..只要點擊了按鈕,那么就會觸發這個事件...
        OnClickListener listener = new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                setTitle("您的答案是:" + ((TextView) v).getText()); //這個地方可以使用setTitle方法將獲取的字符串顯示在TextView上...
            }
        };

        // 為界面中的每個按鈕綁定上這個單擊監聽器
        findViewById(R.id.Button01).setOnClickListener(listener);
        findViewById(R.id.Button02).setOnClickListener(listener);
        findViewById(R.id.Button03).setOnClickListener(listener);
    }
}

  在這里再說一下TextView,TextView是一個文本顯示組件..很常用的一個組件,TextView類被很多的組件類去直接繼承或者是間接繼承..像Button,EditText,CheckBox,RadioButton等等都是繼承了TextView類..TextView是一個非常重要的地方..再舉一個例子來深入理解...

<?xml version="1.0" encoding="utf-8"?>

<!--<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">這里也可以在TextView外面加入一層這個東西,也可以直接實現文本滾動..-->
<Linearlayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <textview
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textsize="30sp" >
    </textview>

</Linearlayout>

<!--</ScrollView>-->

java文件...這里就很簡單了...別忘我們還需要修改一下string.xml文本...

package android.basic.lesson9;

import android.app.Activity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;

public class HelloTextView extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 找到TextView組件
        TextView tv = (TextView) findViewById(R.id.TextView01);

        // 設置移動方法
        tv.setMovementMethod(ScrollingMovementMethod.getInstance());
    }
}

ii.EditText..可編輯的文本顯示組件..

布局文件就放這一個控件就可以了...

<?xml version="1.0" encoding="utf-8"?>
<Linearlayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textsize="30sp" >
    </EditText>

</Linearlayout>
package android.basic.lesson9;

import android.app.Activity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;

public class HelloTextView extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final EditText et = (EditText) findViewById(R.id.EditText01);
        et.setOnKeyListener(new View.OnKeyListener() {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // 監視硬鍵盤按鍵
                if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                    //這句話的意思其實就是當我們按下鍵盤的時候,獲取到鍵盤的的輸入值...
                    Toast.makeText(HelloTextView.this, et.getText(),Toast.LENGTH_SHORT).show();
                    // 返回true說明你已經處理了這個事件並且它應該就此終止,如果返回false就表示此事件還需要繼續傳遞下去
                    return true;
                }
                return false;
            }
        });

    }
}

  這個就是JAVA文件了..Toast是信息提示框組件..這里的HelloTextView表示的就是我們主函數,Toast.makeText()表示的是指定顯示文本資源和信息的顯示時間...大家可以試一下就可以理解這個東西的作用了..

iii.ImageButton和ImageView組件

ImageButton圖片按鈕...就是一個特殊的按鈕而已...ImageView圖片視圖...二者在被點擊的時候所產生的效果是不一樣的...這里大家去試試就很容易發現了...

OnTouchListener()與OnClickListener()方法的區別...

<!--在使用圖片組件的時候,一定要把圖片導入到我們的drawable文件夾下面,否則會報錯..-->
<?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" >
    <ImageButton 
        android:id="@+id/ImageButton01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/p1"
        />
    <ImageView 
        android:id="@+id/ImageView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/p2"/>
</LinearLayout>

java文件。。。

package android.basic.lesson9;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;

public class MainHelloImageButton extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /*
         * OnClickListener()當屏幕或者是其他組件被點擊的時候觸發..必須要有點擊和松開兩個事件..才被觸發..
         * OnTouchListener()這個表示的觸碰屏幕或者組件的時候就會觸發,有可能只是划過某一位置..就被觸發..
* 這就二者的區別所在...
*/ // 找到xml中的ImageButton和ImageView final ImageButton ib = (ImageButton) findViewById(R.id.ImageButton01); final ImageView iv = (ImageView) findViewById(R.id.ImageView01); // 定義觸摸監聽 OnTouchListener otl = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (v.getId()) { case R.id.ImageButton01: Toast.makeText(getApplicationContext(),"觸摸" + ((ImageView) v).getId(), Toast.LENGTH_LONG).show(); break; case R.id.ImageView01: Toast.makeText(getApplicationContext(),"觸摸" + ((ImageView) v).getId(), Toast.LENGTH_LONG).show(); break; } return false; } }; // 定義點擊監聽 OnClickListener ocl = new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(),"點擊" + ((ImageView) v).getId(), Toast.LENGTH_LONG).show(); } }; // 綁定監聽 ib.setOnClickListener(ocl); ib.setOnTouchListener(otl); iv.setOnClickListener(ocl); iv.setOnTouchListener(otl); } }

iv.CheckBox組件...

復選按鈕...復選按鈕估計大家也很熟悉,比如說在注冊賬號的時候就會有這個東西的出現...

OnClickListener()和OnCheckChangedListener()方法的區別...

這里添加了一個文本顯示組件和兩個復選框..復選框就代表可以一次選擇多個...而單選框一次只能選擇一個...

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <textview
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="選擇你想得到的東西:" >

        <checkbox
            android:id="@+id/CheckBox01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="蘋果" >
        </checkbox>

        <checkbox
            android:id="@+id/CheckBox02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="葡萄" >
        </checkbox>
    </textview>

</linearlayout>

Java文件...這段代碼說明了一下二者的區別...

package com.example.android_view;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.CheckBox;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
public class MainActivity extends Activity {
    private TextView TextView_01;
    private CheckBox CheckBox_01;
    private CheckBox CheckBox_02;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView_1=(TextView)findViewById(R.id.TextView01);
        CheckBox_1=(CheckBox)findViewById(R.id.CheckBox01);
        CheckBox_2=(CheckBox)findViewById(R.id.ChechBox02);
        /*OnClickListener()和OnCheckChangeListener()的區別在於:在復選框中,復選框的值不一定非要通過點擊才能夠進行選擇
         *直接調用setChecked也可以直接進行改變..這樣OnClickListener就無法進行監聽了..
         * */
        OnClickListener ol=new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if(!((CheckBox)arg0).isChecked()){
                    Toast.makeText(MainActivity.this,((CheckBox)arg0).getText()+"被取消",Toast.LENGTH_SHORT).show();
                }
            }
            
        };
        //起初被點擊的時候會直接觸發這個監聽..當其他復選框被選擇的時候這個監聽也會被觸發..因為可以直接通過OnCheckChangeListener進行直接監聽..
        OnCheckedChangeListener od=new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                // TODO Auto-generated method stub
                if(arg1){
                    Toast.makeText(MainActivity.this,arg0.getText()+"被選擇",Toast.LENGTH_SHORT).show();//獲取這個對象的資源信息..
                }
                else{
                    Toast.makeText(MainActivity.this, arg0.getText()+"被取消", Toast.LENGTH_SHORT).show();
                }
                
            }
        };
        CheckBox_1.setOnClickListener(ol);
        CheckBox_2.setOnClickListener(ol);
        CheckBox_1.setOnCheckedChangeListener(od);
        CheckBox_2.setOnCheckedChangeListener(od);
}
  
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
   
}

v.RadioGroup和RadioButton

這兩個代表單選組和單選按鈕..這里我們在單選組中加入了兩個單選按鈕子元素...很簡單的東西....

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <radiogroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <radiobutton
            android:id="@+id/radio_red"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="紅" >
        </radiobutton>
            <radiobutton
                android:id="@+id/radio_blue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="藍" >
            </radiobutton>
        
    </radiogroup>

</linearlayout>
package android.basic.lesson9;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.Toast;

public class MainHelloRadioGroup extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                final RadioButton radio_red = (RadioButton) findViewById(R.id.radio_red);
                final RadioButton radio_blue = (RadioButton) findViewById(R.id.radio_blue);

                OnClickListener ocl = new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                        Toast.makeText(MainHelloRadioGroup.this, ((RadioButton)v).getText(), Toast.LENGTH_SHORT).show();

                        }
                };

                radio_red.setOnClickListener(ocl);
                radio_blue.setOnClickListener(ocl);
        }
}

這一章內容雖然很多,但是也就是一些基礎的東西...主要還是代碼多了一些,方便理解..組件這東西多練習練習其實就很容易掌握的...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM