如何自定义一个View,并动态设置style
2017-07-25
展开全部
定义一个TextView的style,常用的方法是在xml文件中实现,但有时候我们需要动态的在代码中自定义个style的View,进行动态的添加或删除等控制,这时候需要用到inflater方法。
TextView的xml,R.layout.empty_text_view:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/empty_text_view"
android:text="@string/tips_no_relative_order_list"
style="@style/emptyView"
android:visibility="visible"/>
1
2
3
4
5
6
7
1
2
3
4
5
6
7
stytles.xml文件中的style定义:
<style name="emptyView">
<item name="android:textSize">@dimen/default_text_size_large</item>
<item name="android:background">@drawable/tips_for_empty_content_bg</item>
<item name="android:visibility">gone</item>
<item name="android:paddingTop">20dp</item>
<item name="android:paddingBottom">20dp</item>
<item name="android:paddingLeft">50dp</item>
<item name="android:paddingRight">50dp</item>
<item name="android:layout_centerInParent">true</item>
<item name="android:layout_gravity">center</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
代码中动态定义TextView:
***TextView emptyTextView = (TextView) inflater.inflate(R.layout.empty_text_view, null);***
1
1
需要注意的是它与fragment中使用的区别,如自定义一个fragment时,需要实现onCreateView方法,以定义fragment对应的布局xml:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = ***inflater.inflate(R.layout.fragment_trade_record, container, false);***
}
1
2
3
4
5
1
2
3
4
5
而它与listView的adapter的getView方法中定义xml文件的方法相同:
@Override
public View getView(int i, View view, ViewGroup viewgroup) {
titleView = null;
iconView=null;
if(view == null){
view = ***LayoutInflater.from(context).inflate(R.layout.trade_list_item_info, null);***
}
titleView=(TextView)view.findViewById(R.id.TradeItemTitle);
titleView.setText(tradeTitleAndIconList.get(i).titleName);
iconView=(TextView)view.findViewById(R.id.TradeItemIcon);
if (tradeTitleAndIconList.get(i).selected)
{
titleView.setTextColor(Color.RED);
iconView.setBackgroundResource(tradeTitleAndIconList.get(i).titleIconRed);
}
else
{
titleView.setTextColor(Color.WHITE);
iconView.setBackgroundResource(tradeTitleAndIconList.get(i).titleIcon);
}
return view;
}
TextView的xml,R.layout.empty_text_view:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/empty_text_view"
android:text="@string/tips_no_relative_order_list"
style="@style/emptyView"
android:visibility="visible"/>
1
2
3
4
5
6
7
1
2
3
4
5
6
7
stytles.xml文件中的style定义:
<style name="emptyView">
<item name="android:textSize">@dimen/default_text_size_large</item>
<item name="android:background">@drawable/tips_for_empty_content_bg</item>
<item name="android:visibility">gone</item>
<item name="android:paddingTop">20dp</item>
<item name="android:paddingBottom">20dp</item>
<item name="android:paddingLeft">50dp</item>
<item name="android:paddingRight">50dp</item>
<item name="android:layout_centerInParent">true</item>
<item name="android:layout_gravity">center</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
代码中动态定义TextView:
***TextView emptyTextView = (TextView) inflater.inflate(R.layout.empty_text_view, null);***
1
1
需要注意的是它与fragment中使用的区别,如自定义一个fragment时,需要实现onCreateView方法,以定义fragment对应的布局xml:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = ***inflater.inflate(R.layout.fragment_trade_record, container, false);***
}
1
2
3
4
5
1
2
3
4
5
而它与listView的adapter的getView方法中定义xml文件的方法相同:
@Override
public View getView(int i, View view, ViewGroup viewgroup) {
titleView = null;
iconView=null;
if(view == null){
view = ***LayoutInflater.from(context).inflate(R.layout.trade_list_item_info, null);***
}
titleView=(TextView)view.findViewById(R.id.TradeItemTitle);
titleView.setText(tradeTitleAndIconList.get(i).titleName);
iconView=(TextView)view.findViewById(R.id.TradeItemIcon);
if (tradeTitleAndIconList.get(i).selected)
{
titleView.setTextColor(Color.RED);
iconView.setBackgroundResource(tradeTitleAndIconList.get(i).titleIconRed);
}
else
{
titleView.setTextColor(Color.WHITE);
iconView.setBackgroundResource(tradeTitleAndIconList.get(i).titleIcon);
}
return view;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询