2015-12-31 3 views
0

У меня есть следующий xml в drawable.Фон кнопки не меняется при удерживании нажатой

<?xml version="1.0" encoding="utf-8"?> 
<!--drawable/btn_send_comment.xml--> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="false"> 
     <layer-list> 
      <item android:bottom="0dp" android:left="2dp" android:right="0dp" android:top="2dp"> 
       <shape android:shape="rectangle"> 
        <solid android:color="@color/fab_color_shadow"/> 
        <corners android:radius="2dp"/> 
       </shape> 
      </item> 

      <item android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp"> 
       <shape android:shape="rectangle"> 
        <solid android:color="@color/btn_send_normal"/> 
        <corners android:radius="2dp"/> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 
    <item android:state_pressed="true"> 
     <shape android:bottom="0dp" android:left="2dp" android:right="0dp" android:shape="rectangle" android:top="2dp"> 
      <solid android:color="@color/btn_default_light_normal"/> 
      <corners android:radius="2dp"/> 
     </shape> 
    </item> 

</selector> 

У меня есть следующий код, чтобы изменить состояние кнопки для нажатия:

package com.example.android.view; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.ViewAnimator; 

import com.example.android.R; 


public class SearchPeopleButton extends ViewAnimator implements View.OnClickListener { 
    public static final int STATE_SELECTED = 0; 
    public static final int STATE_NOT_SELECTED = 1; 

Context ctx; 
private static final long RESET_STATE_DELAY_MILLIS = 2000; 

private int currentState; 

private OnSendClickListener onSendClickListener; 

private Runnable revertStateRunnable = new Runnable() { 
    @Override 
    public void run() { 
     setCurrentState(STATE_SELECTED); 
    } 
}; 

public SearchPeopleButton(Context context) { 
    super(context); 
    init(); 
} 

public SearchPeopleButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

private void init() { 
    LayoutInflater.from(getContext()).inflate(R.layout.view_search_button, this, true); 
    ctx = getContext(); 
} 

@Override 
protected void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    currentState = STATE_SELECTED; 
    super.setOnClickListener(this); 
} 

@Override 
protected void onDetachedFromWindow() { 
    removeCallbacks(revertStateRunnable); 
    super.onDetachedFromWindow(); 
} 

public void setCurrentState(int state) { 

    currentState = state; 
    if (state == STATE_NOT_SELECTED) { 

    } else if (state == STATE_SELECTED) { 
     setPressed(true); 
    } 
    showNext(); 
} 

@Override 
public void onClick(View v) { 
    if (onSendClickListener != null) { 
     onSendClickListener.onSendClickListener(this); 
    } 
} 

public void setOnSendClickListener(OnSendClickListener onSendClickListener) { 
    this.onSendClickListener = onSendClickListener; 
} 

@Override 
public void setOnClickListener(OnClickListener l) { 
    //Do nothing, you have you own onClickListener implementation (OnSendClickListener) 
} 

public interface OnSendClickListener { 
    public void onSendClickListener(View v); 
} 

}

Здесь является использование кнопки на мой взгляд:

 <com.example.android.view.SearchPeopleButton 
     android:id="@+id/btnPeople" 
     android:layout_width="72dp" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="2dp" 
     android:layout_marginLeft="8dp" 
     android:background="@drawable/btn_send_comment" 
     android:elevation="4dp" 
     android:orientation="vertical"/> 

Вот мой view_search_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ImageView 
     android:id="@+id/ivFeedAvatar" 
     android:src="@drawable/ic_hashtag_grey" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</merge> 

Я вижу, что я получаю onClickEvents, но цвет прессованного состояния не отображается.

+0

Вы можете разместить код SearchPeopleButton? – Theo

+0

добавлен полный код кнопки. – lionelmessi

+0

SearchPeopleButton не наследует от Button или другого элемента управления, который определяет нажатое состояние, поэтому нажатое состояние в вашем фоновом режиме не будет иметь эффекта. – Theo

ответ

1

Вы можете использовать управление ImageButton для отображения изображения и поддержки нажатого состояния. http://developer.android.com/reference/android/widget/ImageButton.html

Изменить использование кнопки для:

<ImageButton 
    android:id="@+id/btnPeople" 
    android:layout_width="72dp" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="2dp" 
    android:layout_marginLeft="8dp" 
    android:background="@drawable/btn_send_comment" 
    android:elevation="4dp" 
    android:orientation="vertical"/> 

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

+0

Я изменил его на ImageButton и теперь менял цвет при нажатии. Как сохранить один и тот же цвет, пока я не нажму? Я бы не хотел использовать переключатель. – lionelmessi

+0

Вы ищете элемент управления, который поддерживает выбранное состояние. Используйте ToggleButton или этот хак, чтобы добавить выбранное состояние в ImageButton: http://stackoverflow.com/a/3417158/483708 – Theo

0

Привет смотрите в следующей ссылке

Шаг 1.Pick цвета и название темы и применить и выбрать кнопку и другие в соответствии с вашим requirement.Copy и вставьте загруженный код и применить тему он будет работать ,

http://android-holo-colors.com/

Смежные вопросы