как обнаружить в пользовательской панели инструментов, если меню существует - PullRequest
0 голосов
/ 08 января 2019

Я бы хотел добавить TextView на свою пользовательскую панель инструментов таким образом, чтобы я мог установить его параметры макета в соответствии с его положением с или без OptionsMenu на панели инструментов. Я хотел бы использовать один и тот же макет панели инструментов в нескольких фрагментах AppCompatActivities +. Проблема в том, что когда на панели инструментов нет меню, TextView «касается» правой стороны без полей:

correct with menu missing margin without menu

Если я добавлю поле или отступ, то оно «всегда будет там», поэтому, даже если есть меню, оно будет слишком сильно сдвигать его влево.

Как я могу изменить свой макет, чтобы иметь разрыв в 16dp между TextView и правой стороной экрана, когда нет меню? Или как программно определить, есть ли меню опций?

Макет:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity"
    tools:menu="@menu/main">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary">

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_gravity="end"
                    android:gravity="center_vertical|end">

                    <TextView
                        android:id="@+id/toolbar_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        tools:text="19:48" />
                </LinearLayout>
            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.AppBarLayout>

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

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

код:

public class BaseUpdatedActivity extends AppCompatActivity implements Updater.UpdateListener {

    private TextView toolbarText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);
        toolbarText = findViewById(R.id.toolbar_text);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

    protected void isThereOptionsMenu(boolean is) {
        // I could set the margin of the textview here
        // if I knew how to detect if there's an options menu
        // Note: the menu is added from the fragments
    }

    @Override
    public void onResume() {
        super.onResume();
        Updater.getInstance().registerListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        Updater.getInstance().unregisterListener(this);
    }

    @Override
    public void onUpdate(Update update) {
        if (toolbarText != null && update != null) {
            String lastUpdatedAt = DateHelper.timeFormat.format(new Date());
            toolbarText.setText(lastUpdatedAt);
        }
    }

}
...