是否有可以在布局文件中使用的 XML 标记ListView.addHeaderView()
?
问问题
2178 次
1 回答
18
我写了一个简单的ListView
像你的要求。
attrs.xml
在文件夹中声明自定义属性value
:<resources> <declare-styleable name="HeaderListViewFromXML"> <attr name="headerView" format="reference"/> </declare-styleable> </resources>
创建
HeaderListViewFromXML
类扩展ListView
public class HeaderListViewFromXML extends ListView { private int headerId; public HeaderListViewFromXML(Context context) { this(context, null); } public HeaderListViewFromXML(Context context, AttributeSet attrs) { this(context, attrs, 0); } public HeaderListViewFromXML(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.HeaderListViewFromXML, defStyle, defStyle); try { headerId = a.getResourceId(R.styleable.HeaderListViewFromXML_headerView, View.NO_ID); if (headerId != View.NO_ID) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View header = inflater.inflate(headerId, null); addHeaderView(header); } } finally { a.recycle(); } } }
声明自
HeaderListViewFromXML
定义layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.example.rewidget.HeaderListViewFromXML android:id="@+id/listWithHeader" android:layout_width="fill_parent" android:layout_height="150dp" android:layout_marginTop="60dp" android:background="#00FF00" // custom attribute. Point to layout in header1.xml app:headerView="@layout/header1" /> </RelativeLayout>
在 Activity 中,像往常一样使用
ListView
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView list = (ListView) findViewById(R.id.listWithHeader); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); list.setAdapter(adapter); } }
于 2012-11-06T04:38:48.680 回答