Кнопка Выбранное и Сосредоточенное состояние одновременно - PullRequest
0 голосов
/ 09 июля 2019

у меня 4 кнопки.Фоновое пространство несколько больше по сравнению с сфокусированным состоянием.Нечто подобное на экране ниже.При изменении фокуса цвет текста должен измениться. При нажатии на любую кнопку фон должен измениться, и фокус должен работать как обычно, за исключением того, что белый прямоугольник не должен оставаться внутри нажатой кнопки, как другие нормальные кнопки .

Result

Когда фокус перемещается, должен перемещаться только внутри белого сфокусированного прямоугольника, а фон должен оставаться.

Пользовательский интерфейс:

    <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>
...