настраиваемый макет панели действий с использованием appcompat

У меня есть приложение с панелью действий, которая содержит 3 изображения, для этого я использую библиотеку appcompat, вот код:

private void setupActionBar() {

     // Inflate a "Done/Cancel" custom action bar view.
      final LayoutInflater inflater = (LayoutInflater) this
          .getSupportActionBar().getThemedContext()
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      final View customActionBarView = inflater.inflate(
          R.layout.my_custom_actionbar, null);
      customActionBarView.findViewById(R.id.title);



    final ActionBar actionBar = this.getSupportActionBar();
      actionBar.setDisplayOptions(
          ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM | 
          ActionBar.DISPLAY_SHOW_HOME | 
          ActionBar.DISPLAY_SHOW_TITLE);

      actionBar.setCustomView(customActionBarView, 
              new ActionBar.LayoutParams(
                  ViewGroup.LayoutParams.MATCH_PARENT, 
                  ViewGroup.LayoutParams.MATCH_PARENT
              )
             );
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gray" >


<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="fill_horizontal" >


    <ImageView
        android:id="@+id/facebook"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center_vertical"
        android:src="@drawable/ic_fb" />

    <ImageView
        android:id="@+id/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|center"
        android:src="@drawable/ic_hotels" />

     <ImageView    
         android:id="@+id/tweetter"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:src="@drawable/ic_tweet" 
      />
      </FrameLayout>
      </RelativeLayout>

настраиваемая панель действий загружается без проблем, но мне не удалось получить правильный макет введите здесь описание изображения

Я попытался внести некоторые изменения в файл XML, но это не сработало. так что я забываю?


person choco    schedule 27.04.2014    source источник
comment
Что такое logo изображение? Заменяет ли он значок приложения слева? Кроме того, какова цель FrameLayout?   -  person fllo    schedule 29.04.2014


Ответы (1)


Когда я попробовал ваш код, как вы написали, у меня есть такой результат:

 ________________________________
|                                |  
| facebook     tweeter      logo | 
|________________________________|  

Тогда я предполагаю, что атрибуты layout_gravity неверны. Кроме того, кажется, что вы меняете право и лево. И FrameLayout кажется бесполезным в вашем случае (- я жду вашего ответа для моего комментария, чтобы быть уверенным). Этот макет может достичь того, что вы хотите:

<?xml version="1.0" encoding="utf-8"?>
<!-- Use fill_horizontal to get the whole actionbar
And center_vertical gravity on all the child views -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/gray"
    android:layout_gravity="fill_horizontal"
    android:gravity="center_vertical" >

    <!-- Use layout_alignParentRight attribute -->
    <ImageView
        android:id="@+id/facebook"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_fb"
        android:layout_alignParentRight="true" />

    <!-- Use layout_alignParentLeft attribute -->
    <ImageView
        android:id="@+id/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_hotels"
        android:layout_alignParentLeft="true" />

    <!-- Use layout_toLeftOf (id) attribute -->
    <ImageView    
        android:id="@+id/tweetter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_tweet"
        android:layout_toLeftOf="@id/facebook" />

</RelativeLayout>  

Я получаю этот вывод:

 ________________________________
|                                |  
| logo         tweeter  facebook | 
|________________________________|  
person fllo    schedule 28.04.2014
comment
Это сработало, большое спасибо за объяснения, я только начинаю разработку для Android .. только одно, я изменил высоту и ширину своего логотипа, я полагаю, что использовал большое изображение - person choco; 29.04.2014
comment
Размеры значков см. в разделе Иконография из документации, особенно эта тема для панели ActionBar. Кроме того, у вас есть отличный инструмент для преобразования px в dp и наоборот. Это может тебе помочь, @choco. - person fllo; 29.04.2014