0

私は次の問題に直面しました:

gmailアプリや別のアプリのような小見出しを持つナビゲーションドロワーを実装しようとしています:

VK

Gmail

ご覧のとおり、各リストの最後に仕切りがないことを強調しました

SOスタックオーバーフローから小見出しを付けて実装しましたが、最終的には次のようになりました。

マイアプリ ご存知のように、ナビゲーション ドロワーはリストビューを使用します。分割線が存在する理由は、サブヘッダーもリスト項目であるため、オプション footerDividerEnabled を false に設定しても問題は解決しません。

したがって、私の次の実装は、小見出しとリストビューを含むビューを配置し、ナビゲーションドロワーのリストビューに追加することでした。

MainActivity のソース コードは次のとおりです。

package com.myphun.radio;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;

import com.example.androidradio.R;
import com.myphun.ui.adapters.ListViewAdapter;
import com.myphun.ui.components.SlidingMenuLayout;

public class MainActivity extends ActionBarActivity
{
    private SlidingMenuLayout mSlidingMenuLayout;
    private ListView leftDrawerList;
    private ListViewAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSlidingMenuLayout = (SlidingMenuLayout) findViewById(R.id.main_sliding_menu);
        leftDrawerList = (ListView) findViewById(R.id.left_drawer_list);

        ViewArrayAdapter viewArrayAdapter = new ViewArrayAdapter(this);
        View generic_drawer_view = View.inflate(this, R.layout.sliding_menu_general_section_layout, null);
        viewArrayAdapter.add(generic_drawer_view);

        ListView genericCategoriesListView = (ListView) generic_drawer_view.findViewById(R.id.general_drawer_list);

        mAdapter = new ListViewAdapter(this);

        mAdapter.addItem("Mercury", R.drawable.mercury);
        mAdapter.addItem("Venus", R.drawable.venus);
        mAdapter.addItem("Earth", R.drawable.earth);
        mAdapter.addItem("Mars", R.drawable.mars);

        mAdapter.addItem("Neptune", R.drawable.neptune);
        mAdapter.addItem("Saturn", R.drawable.saturn);
        mAdapter.addItem("Uranus", R.drawable.uranus);
        mAdapter.addItem("Jupiter", R.drawable.jupiter);

        genericCategoriesListView.setAdapter(mAdapter);

        leftDrawerList.setAdapter(viewArrayAdapter);
    }

}

class ViewArrayAdapter extends ArrayAdapter<View>
{

    public ViewArrayAdapter(Context context)
    {
        super(context, 0, new ArrayList<View>());
    }

    public ViewArrayAdapter(Context context, List<View> viewsList)
    {
        super(context, 0, viewsList);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        return getItem(position);
    }
}

メイン アクティビティ XML:

 <com.myphun.ui.components.SlidingMenuLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_sliding_menu"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- The main content view -->

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/textView122"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </FrameLayout>
    <!-- The navigation drawer -->

    <ListView
        android:id="@+id/left_drawer_list"
        android:layout_width="275dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#444444"
        android:choiceMode="singleChoice"
        android:divider="#555555"
        android:dividerHeight="0dp"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false" />

</com.myphun.ui.components.SlidingMenuLayout>

カスタム ビュー:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/general_drawer_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/general_drawer_header"
        android:layout_width="match_parent"
        android:layout_height="62dp"
        android:background="@drawable/list_selector"
        android:gravity="bottom"
        android:paddingBottom="5dp"
        android:paddingRight="16dp"
        android:text="Planets"
        android:textColor="#FFFFFF"
        android:textSize="25sp" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#ffffff" />

    <ListView
        android:id="@+id/general_drawer_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#EE444444"
        android:choiceMode="singleChoice"
        android:divider="#555555"
        android:dividerHeight="1dp"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false" />

</LinearLayout>

しかし、何らかの理由で、リストビューは画面全体を埋めません: 悪い結果

xml_attributes (つまり、match_parent、wrap_content、fill_parent) の多くの組み合わせを試しましたが、機能するのは、ListView の layout_height を手動で設定した場合 (つまり、layout_height ="625dp") だけです。

質問は次のとおりです。私が間違っていることは何ですか? どうすれば欲望の結果を達成できますか? リストビューが展開されないのはなぜですか?

4

2 に答える 2

0

すでに回答を受け入れていることは承知していますが、質問の最初の部分がカバーされていません。つまり、見出しの前の仕切りを取り除く方法です。

まず、さまざまなタイプのアイテム (つまり、見出しと通常の行) を処理するように実装した方法がわからないListViewので、それに苦労している人のためのいくつかの参考文献. ListView Headersの回答は私にとって最も役に立ちましたが、他の 2 つの質問も調べました。Navigation Drawer With Headers SectionsSection Headers In Navigation Drawer Listviewです。

第 2 に、仕切りを正しく使用することが重要ListViewです。つまり、下部に境界線を表示するために行アイテムに背景要素を使用せず、属性android:dividerandroid:dividerHeight属性を使用します。外観をカスタマイズしたい場合は、ドキュメントをお読みください

次に、デフォルトでは通常の項目と見出しの間に仕切りが表示されていないことに気付きました(まさにあなたが写真で観察し指摘したものです)。ただし、この機能がどこにも文書化されているのは見つかりませんでした。

最後に、最後にややこしい点があります。通常の項目の後に見出しがない場合は、区切り線が続きます。に追加する必要がありandroid:footerDividersEnabled="false"ますListView

PS。あなたの問題は、Navigation Drawer よりも a に関連していListViewます。前者を検索すると、間違いなくより多くの結果が得られます。

于 2013-09-06T08:37:18.120 に答える