Is there an XML tag that is equivalent to `ListView.addHeaderView'?
android, android-layout, java
Solution
I wrote a simple `ListView` like your requirement.
Declare custom attribute in `attrs.xml` in `value` folder:
<resources>
<declare-styleable name="HeaderListViewFromXML">
<attr name="headerView" format="reference"/>
</declare-styleable>
</resources>
Create `HeaderListViewFromXML` class extended `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();
}
}
}
Declare custom `HeaderListViewFromXML` in `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>
In Activity, use like normal `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);
}
}
Problem
Is there an XML tag which I can use in a layout file that is equivalent to `ListView.addHeaderView()`?