2016年10月23日 星期日

Button的兩種方式 (Android)

官網連結
有兩種方式可以使按鈕起作用,View.OnClickListener 和 XML layout,其中View.OnClickListener有三種方法


※一、View.OnClickListener

※activity_main.xml

<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="test button"/>

※View.OnClickListener的三種方法都是用這個xml


※1.MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_button);
    
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new MyOnClickListener());
    }
    
    private class MyOnClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "extends Listener button", Toast.LENGTH_SHORT).show();
        }
    }
}

※寫一支class繼承View.OnClickListener,然後實作onClick方法


※2.MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_button);
    
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                Toast.makeText(getApplicationContext(), "Listener button", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

※和第一種方法一樣,只是變成匿名類別


※3.MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_button);
    
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View view) {
        Toast.makeText(getApplicationContext(), "class Listener button", Toast.LENGTH_SHORT).show();
    }
}

※不寫class繼承View.OnClickListener,直接繼承View.OnClickListener,一樣實作onClick方法



※二、XML layout 

這種方式是用設定的方式來達成,較常用


※activity_main.xml

<Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="test button"
    android:onClick="xxx"/>

※xxx是要實限的方法名稱,當然也可以叫onClick


※MainActivity.java

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_button);
    }
    
    public void xxx(View view) {
        Button btn = (Button) view;
        String[] display = {"別按我", "按屁啊", "按一次五元", "誰叫你亂按的", "林老師咧"};
        btn.setText(display[(int) (Math.random() * display.length)]);
        Toast.makeText(getApplicationContext(), "setting button", Toast.LENGTH_SHORT).show();
    }
}

※官網有說要public,而且要有View參數,表示自己的這一個按鈕

沒有留言:

張貼留言