現在、ListActivityクラスを拡張しているクラスがあります。常に表示されるいくつかの静的ボタンをリストの上に追加できるようにする必要があります。クラス内からgetListView()を使用してListViewを取得しようとしました。次に、addHeaderView(View)を使用して、画面の上部に小さなレイアウトを追加しました。
Header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<Button
Android:id="@+id/testButton"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Income"
Android:textSize="15dip"
Android:layout_weight="1" />
</LinearLayout>
アダプタを設定する前に、次のことを行います。
ListView lv = getListView();
lv.addHeaderView(findViewById(R.layout.header));
これにより、データベースからデータが取り込まれることを除いて、ListViewに何も起こりません。その上にボタンは表示されません。
ListViewの上部にパディングを追加してみた別のアプローチ。これを行うと、正常に下に移動しましたが、上に追加すると、ListViewがプッシュされました。 ListActivityを使用したときに、ListViewの上にいくつかのボタンを配置できないように思えます。
前もって感謝します。
synic、以前にあなたの提案を試しました。正気のためだけにもう一度試しましたが、ボタンは表示されませんでした。以下は、アクティビティのレイアウトファイルとoncreate()で実装したコードです。
//ヘッダーを追加しようとしているリストアクティビティ
public class AuditActivity extends ListActivity {
Budget budget;
@Override
public void onCreate(Bundle savedInstanceState) {
Cursor test;
super.onCreate(savedInstanceState);
setContentView(R.layout.audit);
ListView lv = getListView();
LayoutInflater infalter = getLayoutInflater();
ViewGroup header = (ViewGroup) infalter.inflate(R.layout.header, lv, false);
lv.addHeaderView(header);
budget = new Budget(this);
/*
try {
test = budget.getTransactions();
showEvents(test);
} finally {
}
*/
// switchTabSpecial();
}
アクティビティのLayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
<ListView Android:id="@Android:id/list" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView Android:id="@Android:id/empty" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:text="@string/empty" />
</LinearLayout>
findViewById()
は、オブジェクトViewのサブビューを見つけるためにのみ機能します。レイアウトIDでは機能しません。
Xmlを対応するViewコンポーネントに変換するには、レイアウトインフレータを使用する必要があります。このようなもの:
_ListView lv = getListView();
LayoutInflater inflater = getLayoutInflater();
View header = inflater.inflate(R.layout.header, lv, false);
lv.addHeaderView(header, null, false);
_
あなたのコードが単にエラーを投げていなかった理由がわかりません。 findViewById()
はおそらくnull
を返しているだけなので、ヘッダーはリストに追加されませんでした。
最も簡単なソリューションは次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background">
<include layout="@layout/actionbar"/>
<ListView
Android:id="@+id/tasklist_TaskListView"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
Android:textColor="@color/baseFont"/>
<include layout="@layout/bottombar"/>
</LinearLayout>
または
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background">
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
<ListView
Android:id="@+id/tasklist_TaskListView"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
Android:textColor="@color/baseFont"/>
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
</LinearLayout>
ボタンの代わりに、別の水平線形レイアウトを追加できます
いくつかの調査の後、ListActivity XMLドキュメント内でTableLayoutとLinearLayoutを混在させると、ヘッダーをドキュメントに追加できることがわかりました。誰かがそれを見たいと思っているなら、以下は私のXML文書です。 synicのアプローチは、おそらく彼のソリューションで作業した後、おそらく正しいアプローチですが、私はそれを思いどおりに機能させることができませんでした。
AuditTab.Java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audittab);
getListView().setEmptyView(findViewById(R.id.empty));
}
audittab.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
Android:layout_width="fill_parent"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent">
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_gravity="center_horizontal">
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="horizontal"
Android:layout_weight="1">
<Button
Android:id="@+id/btnFromDate"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text=""
Android:layout_weight="1" />
<Button
Android:id="@+id/btnToDate"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text=""
Android:layout_toRightOf="@+id/btnFromDate"
Android:layout_weight="1" />
<Button
Android:id="@+id/btnQuery"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Query"
Android:layout_toRightOf="@+id/btnToDate"
Android:layout_weight="1" />
</LinearLayout>
</TableRow>
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_gravity="center_horizontal">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView
Android:id="@Android:id/list"
Android:layout_width="300dip"
Android:layout_height="330dip"
Android:scrollbars="none" />
<TextView
Android:id="@+id/empty"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingTop="10dip"
Android:text="- Please select a date range and press query." />
</LinearLayout>
</TableRow>
</TableLayout>
AuditItem.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:orientation="horizontal"
Android:padding="10sp">
<TextView
Android:id="@+id/transactionDateLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Date: " />
<TextView
Android:id="@+id/transactionDate"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toRightOf="@id/transactionDateLabel" />
<TextView
Android:id="@+id/transactionTypeLabel"
Android:layout_below="@id/transactionDate"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Type: " />
<TextView
Android:id="@+id/transactionType"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dip"
Android:layout_below="@id/transactionDate"
Android:layout_toRightOf="@id/transactionTypeLabel" />
<TextView
Android:id="@+id/transactionAmountLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dip"
Android:text="Amount: "
Android:layout_below="@id/transactionDate"
Android:layout_toRightOf="@id/transactionType" />
<TextView
Android:id="@+id/transactionAmount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionDate"
Android:layout_toRightOf="@id/transactionAmountLabel" />
<TextView
Android:id="@+id/transactionCategoryLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Category: "
Android:layout_below="@id/transactionAmountLabel" />
<TextView
Android:id="@+id/transactionCategory"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionAmountLabel"
Android:layout_toRightOf="@id/transactionCategoryLabel"
/>
<TextView
Android:id="@+id/transactionToAccountLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="To Account: "
Android:layout_below="@id/transactionCategoryLabel" />
<TextView
Android:id="@+id/transactionToAccount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/transactionCategoryLabel"
Android:layout_toRightOf="@id/transactionToAccountLabel" />
<TextView
Android:id="@+id/transactionFromAccountLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="From Account: "
Android:layout_below="@id/transactionToAccountLabel" />
<TextView
Android:id="@+id/transactionFromAccount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionToAccountLabel"
Android:layout_toRightOf="@id/transactionFromAccountLabel" />
<TextView
Android:id="@+id/transactionNoteLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Note: "
Android:layout_below="@id/transactionFromAccountLabel" />
<TextView
Android:id="@+id/transactionNote"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionFromAccountLabel"
Android:layout_toRightOf="@id/transactionNoteLabel" />
<Button
Android:id="@+id/editTransactionBtn"
Android:layout_width="wrap_content"
Android:layout_height="40sp"
Android:visibility="gone"
Android:text="Edit"
Android:layout_below="@id/transactionNoteLabel"/>
<Button
Android:id="@+id/deleteTransactionBtn"
Android:layout_width="wrap_content"
Android:layout_height="40sp"
Android:text="Delete"
Android:layout_below="@+id/transactionNoteLabel"
Android:visibility="gone"
Android:layout_toRightOf="@+id/editTransactionBtn"
Android:ellipsize="end"/>
</RelativeLayout>
上記のListViewの回答は便利ですが、リストでスクロールし、ヘッダーのグラフィックを上部に保持しません。私が見つけた最良の解決策は、アクティビティにカスタムタイトルを設定することです。コンストラクターは次のようになります。
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.your_listview_layout);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.your_header);
...
Your_listview_layout.xmlがListViewを構成し、your_header.xmlに任意のカスタムヘッダーレイアウトが含まれている場合。実行時の問題を引き起こさないために、上記の3行を正確にその順序で呼び出す必要があることに注意してください。
私を助けたチュートリアルは http://www.londatiga.net/it/how-to-create-custom-window-title-in-Android/ であり、Stackで多くの関連ページを見つけることができます「setFeatureInt」という用語を検索してオーバーフローする
静的ヘッダーの追加は簡単です。alignParentTop(またはbottom、right、left)属性がtrueに設定された個別の相対ビューを作成するだけです。