2011-12-15 7 views
1

Некоторые XML атрибуты кнопок (например, фон, TextColor и т.д.) могут быть определены с цветом или вытяжке состояния Список, как это:Android: состояние кнопки изменилось событие

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="#ffff0000"/> 
    <item android:state_focused="true" 
      android:color="#ff0000ff"/> 
    <item android:state_enabled="true" 
      android:color="#ff00ffff"/> 
    <item android:color="#ff000000"/> 
</selector> 

При изменении состояния (нажата/отжата , например), соответствующий цвет меняется автоматически.

Как я могу програмировать обработку какого-либо состояния stateChangedEvent, чтобы выполнить более сложное изменение макета, чем просто изменить цвет (например, изменить размер шрифта или установить другой текст)?

+1

ОСНОВНОМ U ХОЧЕТ ПОКАЗАТЬ, ЧТО КОГДА КНОПКА щелкнула выдавившийся? –

+0

так нет слушателя для прослушивания onSelected? это может произойти без щелчка, из-за какой-то другой части программы callin setSelected (bool). например, без создания пользовательского класса кнопок. –

ответ

4

Для изменения фокусировки и событий касания вы можете зарегистрировать слушателей с помощью setOnFocusChangeListener и setOnTouchListener. И изменения об состояниях с включенным/включенным состоянии, которые вы можете выполнить непосредственно после изменения состояния кнопки.

+0

Похоже, нет никакого общего способа обработки всех изменений сразу? – PVoLan

+0

Один слушатель ко всем событиям? Зачем? :) Если да, то вам нужно написать обработчик для огромного количества событий, даже если вам нужно только изменить фокус. Кстати, вы можете попробовать написать собственное собственное представление для кнопки. – muffinmad

+0

. Селектор запускается, из-за причины. Посмотрите, что-то внутри класса Button должно вызвать какой-то «UpdateColorStateList()», когда ему нужно обновить фон, например, нажатием/фокусировкой/выбором/и т. Д. Я хочу вызвать это. – PVoLan

0

Обработчик onTouch (просмотр v, событие MotionEvent) для определенных видов и выполнения действий в MotionEvent.DOWN/Up в соответствии с вашими требованиями.

0

Вы должны принять ссылку на объект вида (кнопка) через findViewById(<object_id>) и использовать соответствующие методы из API.

Например:

частная кнопка aButton;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

    aButton = (Button) findViewById(R.id.your_button_id); 

    //example 1 
    aButton.setVisibility(SomeExpressionEvaluation ? View.GONE : View.VISIBLE); 

    //example 2 
    if (SomeExpressionEvaluation) { 
     aButton.setText("Some Text"); 
    } 

и так далее, просто взгляните на API, особенно наследуемые методы класса View.

4

// использовать метод выбора, чтобы передать ваши кнопки и изображение // Вы можете использовать цвет также

b1=(Button)findViewById(R.id.button1); 

//  b2=(Button)findViewById(R.id.button2); 


     selector(b1, R.drawable.image_1_2, R.drawable.image_1); 
     // selector(b2, R.drawable.image_2_2, R.drawable.image_2); 


    } 

    public void selector(Button b,int pressed_image,int normal_image) 
    { 
     StateListDrawable states = new StateListDrawable(); 
     states.addState(new int[] {android.R.attr.state_pressed}, 
      getResources().getDrawable(pressed_image));   
     states.addState(new int[] { }, 
      getResources().getDrawable(normal_image));  
     b.setBackgroundDrawable(states); 
    } 
0

Я должен сказать, что вы можете использовать (сенсорный у слушателя), это, как и использовать сенсорный

у слушателя
image=(ImageView)findViewById(R.id.image); 

найти уры изображения первого

Добавить сенсорный у слушателя ур изображения

image.setOnTouchListener(image_onTouch); 

// Добавить метод касания, который по имени image_onTouch

OnTouchListener image_onTouch=new OnTouchListener(){ 
    @Override 
    public boolean onTouch(View arg0,MotionEvent arg1){ 
     int iAction=arg1.getAction(); 

     if(iAction==0){ 
      image.setImageResource(R.drawable.image1); 
     } 
     else{ 
      image.setImageResource(R.drawable.image2); 
     } 
     return false; 
    } 
}; 

// изображение 1 уры изображения, которое и хотят 2 нажми и изображение 2 является изображением, когда вы касаетесь, что изображения, которое вы должны сделать другое изображение, в котором цвет фона вы хотите показать и использовать его в коде

+0

ПОЗВОЛЬТЕ МНЕ ЗНАТЬ ЭТО РАБОТАЕТ? –

+1

'== MotionEvent.ACTION_DOWN' намного понятнее, чем '== 0' – greg7gkb

0

У меня также была такая проблема в прошлом. Я решил, поставив этот XML-файл в отдельную папку с возможностью копирования в Res instaed из drawable-mdpi или еще. И убедитесь, что вы должны предоставить этот Xml в качестве фона вашей кнопки.

1

Просто переопределить View.setPressed:

@Override 
public void setPressed(boolean pressed) { 
    super.setPressed(pressed); 
    ... 
} 
Смежные вопросы