у меня 4 кнопки.Фоновое пространство несколько больше по сравнению с сфокусированным состоянием.Нечто подобное на экране ниже.При изменении фокуса цвет текста должен измениться. При нажатии на любую кнопку фон должен измениться, и фокус должен работать как обычно, за исключением того, что белый прямоугольник не должен оставаться внутри нажатой кнопки, как другие нормальные кнопки .
Когда фокус перемещается, должен перемещаться только внутри белого сфокусированного прямоугольника, а фон должен оставаться.
Пользовательский интерфейс:
<com.example.mytvapplicationjava.MyButton
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1" />
<com.example.mytvapplicationjava.MyButton
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 2" />
<com.example.mytvapplicationjava.MyButton
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 3" />
<com.example.mytvapplicationjava.MyButton
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 4" />
</LinearLayout>
MyButton.java :
public class MyButton extends android.support.v7.widget.AppCompatButton {
public MyButton(Context context) {
super(context);
init();
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setFocusable(true);
setFocusableInTouchMode(true);
setClickable(true);
setGravity(Gravity.CENTER);
setBackground(getResources().getDrawable(R.drawable.tab_item_selector));
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
Log.d("Basava", "onFocusChanged focused? " + focused + " isSelected? " + isSelected());
if (focused) {
setTextColor(getResources().getColor(android.R.color.black));
} else {
setTextColor(getResources().getColor(android.R.color.white));
}
}
}
tab_item_selector.xml :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/layers_selected" android:state_selected="true" /> <!-- selected -->
<item android:drawable="@drawable/layers_focused" android:state_focused="true" /> <!-- focused -->
<item android:drawable="@drawable/layers_focused" android:state_hovered="true" /> <!-- hovered -->
<item android:drawable="@drawable/layers" /> <!-- default -->
</selector>
layer.xml :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="150dp"
android:height="70dp">
<color android:color="@color/lb_grey" />
</item>
<item
android:width="100dp"
android:height="50dp"
android:gravity="center">
<color android:color="@color/lb_tv_white" />
</item>
</layer-list>
Layers_focused.xml :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="150dp"
android:height="70dp">
<color android:color="@color/lb_grey" />
</item>
<item
android:width="100dp"
android:height="50dp"
android:gravity="center">
<color android:color="@android:color/white" />
</item>
</layer-list>
Layers_selected.xml :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="150dp"
android:height="70dp">
<color android:color="@android:color/holo_orange_dark" />
</item>
<item
android:width="100dp"
android:height="50dp"
android:gravity="center">
<color android:color="@android:color/white" />
</item>
</layer-list>