Android中的自定义TabLayout

时间:2018-06-29 12:33:31

标签: android android-tablayout

我正在尝试将自定义TabLayout作为库的一部分进行构建,该库可被其他应用程序使用。此Tablayout中的每个Tab也需要具有自定义背景属性。

public class MyTab extends TabLayout {
        Context mContext;
        public MyTab(Context context) {
            this(context, null);
        }

        public MyTab(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }

        public MyTab(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            setBackground(context.getResources().getDrawable(R.drawable.tab_background));
            setTabMode(MODE_SCROLLABLE);
            mContext = context;
            setSelectedTabIndicatorColor(context.getResources().getColor(R.color.lightest_grey9));

        }

        @Override
        public void addTab(@NonNull Tab tab) {
            super.addTab(tab);
            setTabGravity(GRAVITY_FILL);
            View tabView = LayoutInflater.from(mContext).inflate(R.layout.tab_item_background,null);
            TextView textView = (TextView) tabView.findViewById(R.id.tab_text);
            textView.setText(tab.getText());
    //        textView.setFocusable(true);
            tabView.setFocusable(true);
            tabView.setFocusableInTouchMode(true);
    //        textView.setBackground(getContext().getResources().getDrawable(R.drawable.tab_item_view_background));
            tabView.setBackground(getContext().getResources().getDrawable(R.drawable.tab_item_view_background));

            tab.setCustomView(tabView);
        }
    }

我的要求是:

  1. 选定的指示器应为灰色。
  2. 当Tab选项卡处于焦点状态时(键盘Tab键导航/左右箭头导航),文本周围应该有一个矩形框。

此方法存在问题:

  1. 当我尝试设置自定义视图时,我的文本丢失了,我需要显式设置文本。现在,用户可能想要设置文本/图标/文本+图标(垂直或水平方向)。检测用例并设置合适的背景可能不是很好的实现。有没有更好的方法可以实现这一目标?
  2. 在TabLayout内部,只能通过“ tab”键导航来移动2个标签之间的焦点。我还希望在Tablayout中使用向左/向右箭头键导航。有什么方法可以实现?
  3. 在TabLayout内部,当我尝试将焦点从一个选项卡转移到另一个选项卡时,首先,“选项卡键导航”将焦点完美地转移了(我得到了围绕文本的矩形),但是第二次(当所有选项卡都已用尽,并且选项卡键导航将焦点放在第一个选项卡上,我没有得到矩形周围的矩形,这意味着我的自定义视图焦点状态可绘制对象未应用,再次在第3次工作正常。替代行为?

我想念什么吗?

tab_item_background.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:focusableInTouchMode="true"
        android:id="@+id/tab_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/lightest_grey9" android:background="@drawable/tab_item_view_background"/>
</LinearLayout>

tab_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
        <padding android:left="5dp" android:right="5dp"/>

        <size android:height="38dp" android:width="40dp"/>
        <stroke android:width="2dp"
            android:color="@color/lightest_blue5"/>
</shape>

tab_item_view_background.xml

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

enter image description here

0 个答案:

没有答案