1. 程式人生 > >如何自定義一個View,並動態設定style?

如何自定義一個View,並動態設定style?

定義一個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"/>

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>

程式碼中動態定義TextView:

 ***TextView emptyTextView = (TextView) inflater.inflate(R.layout.empty_text_view, null);***

需要注意的是它與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);***
        }

而它與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;
    }