具有背景属性的自定义TextView XML Drawable

3
我正在使用水平ListView(列表只包含一个TextView),现在我想使用xml drawable来显示user taps 下的列表项下方的line

正如我们通常在Sliding Tabs中使用的那样,请查看下面的截图,在此示例中,用户已选择Tab1,并且Tab2Tab3处于正常状态。

enter image description here

以同样的方式,我想实现我的custom drawable,以获得与我的TextView相同的效果,并为此我正在按照此链接进行操作。

但是我仍然没有成功,可以看到我的TextView的属性:

<TextView
    android:text="@string/app_name"
    android:layout_height="wrap_content"
    android:id="@+id/textView1"
    android:layout_width="wrap_content"        
    android:layout_margin="5dp"
    android:textColor="#000000"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:background="@drawable/custom_textview"
    android:ellipsize="marquee" />

custom_textview.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true">
        <layer-list>
            <item>
                <shape>
                    <solid android:color="#ffff7a00" />
                </shape>
            </item>
            <item android:bottom="3dp">
                <shape>
                    <solid android:color="#222222" />
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

你使用哪种类型的选项卡?设计库还是TabHost或TabLayout? - Arth Tilva
兄弟,我没有使用任何制表符吗?请再读一遍我的问题。 - Oreo
哦,抱歉我明白了... - Arth Tilva
尝试在您的选择器xml中添加<item android:state_selected="false"> item,too。 - Aditi Parikh
2个回答

0

用这段代码替换你的custom_textview.xml文件

 <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#ffff7a00" />
        </shape>
    </item>

    <item
        android:bottom="2dp">
        <shape android:shape="rectangle">
            <solid android:color="#222222" />
        </shape>
    </item>
</layer-list>

但是我得到了每个列表项,而我只想显示选定的一个,例如:上面屏幕中的Tab1。 - Oreo
好的,那么请尝试为 TextView 设置属性 android:textIsSelectable="true"。 - Divya Jain
尝试为TextView设置android:textIsSelectable="true"属性,当你选择此TextView时,尝试在Java中设置textView.setSelected(true)。它可以工作。 - Divya Jain

0

你可以使用简单的逻辑来完成这个任务 创建 row.xml 文件

<LinearLayoutadd attributes with orientation vertical>
<TextView/>
<View android:id="@+id/checkId/>
</LinearLayout/>

创建一个模型(POJO)。
public class MyModel{
String name;
boolean isChecked;
public MyModel(String name,boolean isChecked){
this.name=name;
this.isChecked = isChecked;
}
//apply getters and setters
}

现在创建你的适配器,在getView方法中检查isChecked的值是true还是false,如果为true,则设置id为checkId的视图的背景颜色,否则将其更改为白色。

现在转到你的OnItemClickListener,使用for循环确保点击了哪个项目。

for(int i = 0 ;i < youlist.size;i++){
yourlist.get(i).setIsChecked(false);
}
yourlist.get(positionoflistitem).setIsChecked(true);
youradapter.notifyDataSetChanged();

你完成了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接