3

Пожалуйста, обратитесь к моему проекту по адресу: https://github.com/paulpv/ToolbarSwitchAndroid Панель actionLayout электрощитового приводит текст прыгать, когда меню нажимается

Я работаю на простой пользовательский макет для панели инструментов Android (ака: новый ActionBar). Это простое управление добавляет переключатель на панели инструментов, и их можно увидеть здесь выделены пурпурным цветом:

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

Подобное происходит в альбомной ориентации (тонкому разницей, что меню переполнения всплывающее окно не имеет какого-либо верхняя прокладка).

Что я могу сделать, чтобы actionLayout моего пункта меню, чтобы предотвратить текст от прыжков?

меню/menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".MainActivity"> 

    <item 
     android:id="@+id/action_switch" 
     android:title="@string/action_switch" 
     app:actionLayout="@layout/toolbar_switch" 
     app:showAsAction="always" /> 

    <item 
     android:id="@+id/action_settings" 
     android:title="@string/action_settings" 
     android:orderInCategory="100" 
     app:showAsAction="never" /> 
</menu> 

макет/toolbar_switch.xml

<Switch xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/action_switch" 
    android:text="@string/action_switch" 
    android:switchPadding="10dp" 
    android:background="#ff00ff" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

Очевидно, я думаю, что я мог бы создать два Вида, один TextView и один переключатель, где я отдельно установите текст в TextView, и я не устанавливаю непосредственно текст Switch ... но я предпочел бы установить текст непосредственно на коммутаторе.

У меня есть несколько других вопросов:

  1. При использовании ActionBarActivity и надувание меню панели инструментов, почему onResume вызываемых перед onCreateOptionsMenu?
  2. И наоборот, в том же обстоятельстве, что и # 1, почему onCreateOptionsMenu не вызван между onCreate и onResume?
  3. В ландшафтном режиме размер текста заголовка заметно меньше; это ожидаемо и желательно?
  4. Что я могу сделать, чтобы установить размер текста заголовка пейзажа таким же, как размер текста в портрете?

Спасибо!

Pv

+0

не по теме: Ваш значок заполнен, потому что вы используете 'minHeight' на своей панели инструментов. Ditch it и установите «android: layout_height =» «actionBarSize' вместо этого. –

ответ

1

Я следовал код, чтобы добавить переключатель в моей панели действий, и я был в состоянии решить вашу проблему с «прыгающим текстом», установив ширину Переключить на wrap_content так:

<Switch xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/action_switch" 
    android:text="@string/action_switch" 
    android:switchPadding="10dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/> 
+1

Спасибо, я думал, что попробовал это (и понятия не имею, почему я использовал устаревший« fill_parent », когда я обычно использую« match_parent »). Я ' Я благодарю вас за это, хотя я еще не пробовал его. – swooby

+0

Спасибо за это! Я могу заверить вас, что это работает, я использовал точно такой же код для своего макета. :) –

+0

У меня такая же проблема, похоже переполнение является причиной, так как я просто использую два элемента, в моем меню (один с шоу как действие никогда) никаких идей? – desgraci

0

Я отказался от попыток использовать встроенный в текстовом поле коммутатора или управления SwitchCompat. Я закончил предоставление макета с отдельным полем TextView:

layout/toolbar_switch.XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/action_switch_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingEnd="10dp" 
     android:paddingRight="10dp" 
     android:text="Switch" 
     android:textAllCaps="true" 
     tools:ignore="HardcodedText,RtlHardcoded,RtlSymmetry"/> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/action_switch_control" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 
Смежные вопросы