SherlockActionBar: как настроить CustomView против actionBar


Вопрос:

Как мне вернуть титул?


Вот скриншот (отсутствует заголовок):

Введите описание изображения здесь

Настройка панели действий:

 ActionBar actionBar = getSupportActionBar();
 actionBar.setTitle("My Title");
 actionBar.setIcon(drawable.dropdown_user);

 View mLogoView = LayoutInflater.from(this).inflate(R.layout.mLogoView, null);
 actionBar.setCustomView(mLogoView);

 actionBar.setDisplayShowCustomEnabled(true);
 actionBar.setDisplayShowTitleEnabled(true);
 actionBar.setDisplayHomeAsUpEnabled(true);

Млоговью.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/img_merchant"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true"
        android:src="@drawable/infoflex">
</ImageView>
</RelativeLayout >

1 14

1 ответ:

Первое, что я могу придумать способ исправить, это попытаться установить

<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right" >

К вашим RelativeLayout. Потому что по умолчанию в Android каждое представление добавляется слева направо (если вы не указываете что-то еще в своем коде).

И если это не сработает, я добавлю android:layout_width="90dip" или какое-то другое значение в зависимости от изображения и ваших тестов. Второй вариант больше похож на обходной путь, но я думаю, что он будет работать на всех устройствах.

Редактировать:

Как я обнаружил, существует небольшая проблема с использованием RelativeLayout и пользовательских представлений в ActionBar, поэтому лучше использовать LinearLayout и установить LayoutParams с помощью кода. Измените свой xml, чтобы он выглядел следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:src="@drawable/asus"    />
</LinearLayout >

И в вашей основной деятельности.класс использует это:

import com.actionbarsherlock.app.ActionBar.LayoutParams;
....
ActionBar actionBar = getSupportActionBar();

actionBar.setTitle("OMG");

LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL);
View customNav = LayoutInflater.from(this).inflate(R.layout.img, null); // layout which contains your button.
actionBar.setCustomView(customNav, lp);
actionBar.setDisplayShowCustomEnabled(true);