安卓毎日練習(五)CompoundButton

12639 ワード

ToggleButtonは、以前jQueryがtoggleメソッドをキャンセルしていなかったときにどのようにサボったのかを思い出しました.
注意:
  • LinearLayoutは、RelativeLayoutとは異なり、orientationが必要です.可視化上部の横に区切る、または縦に区切る四角ボタンも選択できます.たとえばandroid:orientation="vertical"
  • などです.
  • 三目演算子の前はjsと同じで、そのstateは括弧を追加する必要のない
  • です.
  • ボタン右クリックでEdit TextOff、TextOn
  • があります
  • 文字右クリックのEdit Textはstringを新規作成し、StringとR.stringを記入することができます.その後、stringが自動的に生成する.xmlから/values
  • ピクチャ右クリックポイントにScaleTypeがあります.
  • を選択できます.
  • AVDが黒画面を起動し、エラーが発生しない場合は、古いAVDを削除して新規作成したstartを削除してrun as
  • を再起動します.
    package com.example.android_8_1;
    
    
    
    import android.app.Activity;
    
    import android.os.Bundle;
    
    import android.widget.CompoundButton;
    
    import android.widget.CompoundButton.OnCheckedChangeListener;
    
    import android.widget.ImageView;
    
    import android.widget.ToggleButton;
    
    
    
    public class MainActivity extends Activity {
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
    
    
    
            ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
    
            tg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
                // imported from android.widget.CompoundButton
    
                @Override
    
                public void onCheckedChanged(CompoundButton buttonView,
    
                        boolean isChecked) {
    
                    // TODO Auto-generated method stub
    
                    setBulbState(isChecked);
    
                }
    
            });
    
        }
    
    
    
        public void setBulbState(boolean state) {
    
            ImageView iv = (ImageView) findViewById(R.id.imageView1);
    
            iv.setImageResource(state? R.drawable.btn : R.drawable.btnhover);
    
    
    
            ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
    
            tg.setChecked(state);
    
        }
    
    
    
    }

    XMLは簡単です
    <LinearLayout 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"
    
        android:orientation="vertical"
    
        android:paddingBottom="@dimen/activity_vertical_margin"
    
        android:paddingLeft="@dimen/activity_horizontal_margin"
    
        android:paddingRight="@dimen/activity_horizontal_margin"
    
        android:paddingTop="@dimen/activity_vertical_margin"
    
        tools:context="com.example.android_8_1.MainActivity" >
    
    
    
        <ImageView
    
            android:id="@+id/imageView1"
    
            android:layout_width="match_parent"
    
            android:layout_height="wrap_content"
    
            android:scaleType="fitXY"
    
            android:src="@drawable/btn" />
    
    
    
        <ToggleButton
    
            android:id="@+id/toggleButton1"
    
            android:layout_width="80dp"
    
            android:layout_height="40dp"
    
            android:layout_gravity="center_horizontal"
    
            android:text="ToggleButton"
    
            android:textOff="  "
    
            android:textOn="  " />
    
    
    
    </LinearLayout>

    アンドロイドが持参したメカニズムは実用的で、この例は終わります.
    また、ラジオボックスは、でグループ化され、ラジオ反発を実現することができる.
    一連の連動型ComponentButtonに変更
    package com.example.android_8_1;
    
    
    
    import com.example.android_8_1.R.id;
    
    
    
    import android.app.Activity;
    
    import android.os.Bundle;
    
    import android.widget.CheckBox;
    
    import android.widget.CompoundButton;
    
    import android.widget.RadioButton;
    
    import android.widget.CompoundButton.OnCheckedChangeListener;
    
    import android.widget.ImageView;
    
    import android.widget.ToggleButton;
    
    
    
    public class MainActivity extends Activity {
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
    
    
    
            ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
    
            tg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
                // imported from android.widget.CompoundButton
    
                @Override
    
                public void onCheckedChanged(CompoundButton buttonView,
    
                        boolean isChecked) {
    
                    // TODO Auto-generated method stub
    
                    setBulbState(isChecked);
    
                }
    
            });
    
            
    
            CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);
    
            cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
    
    
                @Override
    
                public void onCheckedChanged(CompoundButton buttonView,
    
                        boolean isChecked) {
    
                    // TODO Auto-generated method stub
    
                    setBulbState(isChecked);
    
                }
    
            });
    
            
    
            RadioButton rb = (RadioButton) findViewById(id.radioButton2);
    
            rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
    
    
                @Override
    
                public void onCheckedChanged(CompoundButton buttonView,
    
                        boolean isChecked) {
    
                    // TODO Auto-generated method stub
    
                    setBulbState(isChecked);
    
                }
    
            });
    
        }
    
    
    
        public void setBulbState(boolean state) {
    
            ImageView iv = (ImageView) findViewById(R.id.imageView1);
    
            iv.setImageResource(state ? R.drawable.btn : R.drawable.btnhover);
    
    
    
            ToggleButton tg = (ToggleButton) findViewById(R.id.toggleButton1);
    
            CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);
    
            
    
            tg.setText(state ? R.string.onn : R.string.offn);
    
            cb.setText(state ? R.string.offn : R.string.onn);
    
            tg.setChecked(state);
    
            cb.setChecked(state);
    
            RadioButton rb = (RadioButton) findViewById(R.id.radioButton2);
    
            rb.setChecked(state);
    
            rb = (RadioButton) findViewById(R.id.radioButton1);
    
            rb.setChecked(!state);
    
        }
    
    
    
    }

    XMLは変わりません.注意しなければならないのは、論理的には順調に見えるがcheckbox点が現れて反応しなければ、白黒が逆さまになって鳥をいじるに違いない.
    例えば文字はonnが生きているoffnとして、checked(!state)はradioButton 1に対してまだradioButton 2に対しています.