2013-07-02 2 views
1

Я пытаюсь включить TextView в стандартную навигацию по ящику для Android. Но я действительно не знаю, как его использовать. Это то, что у меня есть до сих пор.Навигация на ящике с текстовым просмотром и списком

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- As the main content view, the view below consumes the entire 
     space available using match_parent in both dimensions. --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 

    <LinearLayout 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:gravity="left" 
     > 

     <TextView 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:text="Algemeen" 
      android:background="@drawable/title_menu" 
      android:textColor="#94A1A1" 
      android:textAppearance="?android:attr/textAppearanceListItemSmall" 
      android:minHeight="?android:attr/listPreferredItemHeightSmall" 
      android:layout_weight="1" 
      android:gravity="start"  
     /> 

     <ListView 
      android:id="@+id/left_drawer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:choiceMode="singleChoice" 
      android:divider="@android:color/transparent" 
      android:dividerHeight="0dp" 
      android:background="#323232" 
      android:layout_weight="1" 
      android:gravity="start" 
     /> 

    </LinearLayout> 

</android.support.v4.widget.DrawerLayout> 

Я принимаю сообщение: No drawer view found with absolute gravity LEFT. Может кто-нибудь мне помочь?

+0

http://www.androiddevelopersolution.com /2013/04/facebook-like-slide-in-and-slide-out.html –

ответ

1

Я думаю, что проблема кроется в андроиде: gravity = "left" в линейной компоновке. Документы рекомендуют использовать layout_gravity = "start", и это должно соответствовать вашему требованию.

2

Создание ящика макета

Чтобы добавить панель навигации, объявить пользовательский интерфейс с объектом aDrawerLayout в качестве корневого зрения макета. Внутри theDrawerLayout добавьте одно представление, содержащее основное содержимое экрана (ваш основной макет, когда ящик скрыт), и другое представление, содержащее содержимое навигационного ящика.

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<FrameLayout 
android:id="@+id/content_frame" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 
<ListView 
android:id="@+id/left_drawer" 
android:layout_width="240dp" 
android:layout_height="match_parent" 
android:layout_gravity="start" 
android:choiceMode="singleChoice" 
android:divider="@android:color/transparent" 
android:dividerHeight="0dp" 
android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

Этот макет демонстрирует некоторые важные характеристики макета: Основной вид контента (выше FrameLayout) должен быть первым ребенком в DrawerLayout, поскольку порядок XML предполагает г-упорядочивание и выдвижной ящик должен быть на вершине содержание. Основной вид содержимого установлен в соответствии с шириной и высотой родительского представления, поскольку он представляет весь пользовательский интерфейс, когда ящик навигации скрыт. Вид ящика (ListView) должен указывать его горизонтальную гравитацию с помощью андроида: layout_gravityattribute. Для поддержки языков «справа налево» (RTL) укажите значение «start» вместо «left» (поэтому ящик появляется справа, когда макет RTL). Вид выдвижного ящика указывает его ширину в единицах dp, а высота соответствует родительскому виду. Ширина ящика должна быть не более 320dp, поэтому пользователь всегда может видеть часть основного содержимого. Инициализировать список ящиков & Ящик Latyout

Сначала вы должны инициализировать список ящиков и расположение ящика. Затем необходимо установить значения для списка с помощью адаптера.

mColors = getResources().getStringArray(R.array.colors_array); 
mDrawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout); 
mDrawerList=(ListView)findViewById(R.id.left_drawer); 

Прислушайтесь Открыть и Закрыть События

Для прослушивания ящика открытого и близких событий, вызовите setDrawerListener() на вашем DrawerLayout и передать его реализацию DrawerLayout.DrawerListener. Этот интерфейс обеспечивает обратные вызовы для событий ящика, таких как onDrawerOpened() и onDrawerClosed().

mDrawerToggle=new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close){ 
public void onDrawerClosed(View view) { 
getActionBar().setTitle(mTitle); 
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
} 
public void onDrawerOpened(View drawerView) { 
getActionBar().setTitle(mDrawerTitle); 
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
} 
}; 

Handle Навигация Нажмите События

Когда пользователь выбирает элемент в списке выдвижного ящика, система вызывает onItemClick() на theOnItemClickListener дано setOnItemClickListener().

public class DrawerItemClickListener implements OnItemClickListener { 
@Override 
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { 
// TODO Auto-generated method stub 
selectItem(position); 
} 
} 
private void selectItem(int position){ 
Fragment fragment=new ColorsFragment(); 
Bundle bundle=new Bundle(); 
bundle.putInt("Position", position); 
fragment.setArguments(bundle); 
FragmentManager fragmentManager=getFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
Toast.makeText(this, position+"", Toast.LENGTH_SHORT).show(); 
mDrawerList.setItemChecked(position, true); 
setTitle(mPlanetTitles[position]); 
mDrawerLayout.closeDrawer(mDrawerList); 
} 

в SelectItem() вы должны вызвать соответствующий фрагмент к дать position.Here у меня есть создать простой фрагмент и изменить цвет фона и текста в зависимости от ввода дают.

public class ColorsFragment extends Fragment{ 
private int[] colors; 
private int position; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
View rootview=inflater.inflate(R.layout.fragment_layout, container,false); 
position=getArguments().getInt("Position"); 
RelativeLayout layout=(RelativeLayout)rootview.findViewById(R.id.layout); 
TextView textView=(TextView)rootview.findViewById(R.id.textview); 
colors=getActivity().getResources().getIntArray(R.array.colors); 
textView.setText(getResources().getStringArray(R.array.colors_array)[position]); 
layout.setBackgroundColor(colors[position]); 
return rootview; 
} 
} 

При использовании ActionBarDrawerToggle, вы должны вызвать его во время onPostCreate() и onConfigurationChanged()

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
super.onPostCreate(savedInstanceState); 
// Sync the toggle state after onRestoreInstanceState has occurred. 
mDrawerToggle.syncState(); 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
super.onConfigurationChanged(newConfig); 
// Pass any configuration change to the drawer toggls 
mDrawerToggle.onConfigurationChanged(newConfig); 
} 

Для получения дополнительной справочной поездки: http://velmuruganandroidcoding.blogspot.in/2014/09/navigation-drawer-in-android.html

+0

Не было бы немного более гуманным просто разместить ссылку на документацию, а не копировать/вставлять все это (и попытайтесь получить очки за это, зыбь...)? – ygesher

Смежные вопросы