Android java метод справки ImageButton - PullRequest
0 голосов
/ 04 июля 2011

Итак, я разбираюсь с этим в детстве.И только что получил мою кнопку, чтобы переключаться так, как я хочу.Но теперь я хочу добавить больше кнопок.

       `public class Menu extends Activity{
        ImageButton select;    
        int isClicked = 0;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                select = (ImageButton)findViewById(R.id.select);
        select.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                     if (isClicked == 0){
                        select.setImageResource(R.drawable.select_pressed);
                        isClicked = 1;
                     }
                     else{
                        select.setImageResource(R.drawable.select);
                        isClicked = 0;
                     }
                }});
             }
          }`

Скажем так, я должен был скопировать этот метод ImageButton.Куда именно я его вставлю, если собираюсь использовать код для новой кнопки?

    `<ImageButton 
android:src="@drawable/select"
android:id="@+id/select"
android:layout_height="30dp"
android:layout_width="120dp"
android:background="@null"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true">
    </ImageButton>`

Ответы [ 3 ]

1 голос
/ 04 июля 2011

Вы можете использовать атрибут tag на кнопке для сохранения состояния. Тогда вы можете поместить свою логику состояния в отдельный метод, подобный этому:

public void changeState(View v) {
                     if (v.getTag() == "false"){
                        ((ImageButton)v).setImageResource(R.drawable.select_pressed);
                        v.setTag("true");
                     }
                     else{
                        ((ImageButton)v).setImageResource(R.drawable.select);
                        v.setTag("false");
                     }
                }});

Этот метод можно вызывать из каждого прослушивателя кликов ImageButton без сохранения состояния многочисленных ImageButton в контексте приложения.

0 голосов
/ 04 июля 2011

Вместо вашего подхода в Android есть так называемые селекторы, которые могут автоматически изменять фоновый ресурс в зависимости от состояния представления.Селекторы определяются в отдельном отрисовываемом XML-файле и на них ссылаются из объявления XML для представления, в котором используются состояния.Например: Selector (android_button.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/android_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/android_focused"
          android:state_focused="true" />
    <item android:drawable="@drawable/android_normal" />
</selector>

Кнопка:

<Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:background="@drawable/android_button" />

Вам все равно придется реализовать список щелчков для каждой кнопки, но у вас будет селектор, который выможно повторно использовать во всех нужных кнопках, и логика представления была отделена от бизнес-логики вашего приложения.

Исходный код, показанный в этом ответе, взят прямо из http://developer.android.com/resources/tutorials/views/hello-formstuff.html#CustomButton, где вы можете прочитатьболее полное объяснение.

0 голосов
/ 04 июля 2011

Вы можете легко создавать кнопки изображений с помощью графического редактора макетов в файле main.xml.Создайте новый объект кнопки изображения для ваших новых кнопок и укажите прослушивателей при нажатии в функции onCreate(), как вы сделали.

...