Как центрировать значки на панели инструментов в андроид-студии
Я задал аналогичный вопрос здесь...
В ответах я получил несколько уроков.
Но этот вопрос дифференцирован. потому что ни один из этих методов не работает в моем проекте.
Я хочу сосредоточить все значки на панели инструментов
Я тестирую все доступные способы... но всегда значки плавают влево.
Я хочу, чтобы центрирующие значки (я предпочитаю, чтобы левый значок плавал слева и справа значок плавает вправо, а другие значки плавают в центре)
Activity.Main.xml
<LinearLayout 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:orientation="vertical" // I add vertical
tools:context=".MainActivity">
<include
android:id="@+id/tool_bar"
layout="@layout/tool_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent" // I add match_parent
android:layout_gravity="center" /> // I add center
</LinearLayout>.
Также в tool_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:background="@color/ColorPrimary"
android:elevation="2dp"
android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
android:layout_gravity="center" // I add center
xmlns:android="http://schemas.android.com/apk/res/android" />
в main_menu.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_forward"
android:title="forward"
android:icon="@drawable/ic_action_arrow_forward"
app:showAsAction="always"
></item>
<item
android:id="@+id/action_zoom_in"
android:title="zoom in"
android:icon="@drawable/ic_action_zoom_in"
app:showAsAction="always"
></item>
<item ...
и для кода выше (main_menu.xml) в <item>
Я пробовал все эти коды:
android:layout_width="match_parent"
android:layout_weight=".2" // 20%
android:gravity="center"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
Я действительно не знаю, что я могу сделать, чтобы выровнять значки.
Я пошел в Google, и я пробовал все сенарио.
В чем моя ошибка?
для всех тестов я не вижу никаких изменений...
![enter image description here]()
прежде чем я захочу pic2 (на картинке выше) Но теперь я просто хочу сосредоточить его!
Для моего теста я получаю только pic 1. без каких-либо изменений.
Ответы
Ответ 1
Исправьте проблему, наслаждайтесь:)
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
android:background="?attr/colorPrimary">
<!-- Code for your Left Button -->
<ImageView
android:id="@+id/yourId"
android:src="@mipmap/yourLeftIcon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_gravity="left" />
<!-- Here is the main code for your Middle Buttons -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button2"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button3"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button4" />
</LinearLayout>
<!-- Code for your Right Button -->
<ImageView
android:id="@+id/yourId"
android:src="@mipmap/yourRightIcon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_gravity="right" />
</android.support.v7.widget.Toolbar>
Ответ 2
Панель инструментов похожа на любой другой вид. Вы можете добавить к нему детей напрямую и получить доступ, как и для обычного вида.
Это не точный ответ на ваш вопрос, но он скажет вам, как идти.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/holo_red_light"
android:elevation="2dp"
android:theme="@style/Base.ThemeOverlay.AppCompat.Dark">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button2"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button3"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"
android:id="@+id/button4" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
Затем в вашем основном фрагменте или где-либо еще вы можете получить доступ к чему-то вроде этого.
Toolbar mToolbar = (Toolbar) root.findViewById(R.id.tool_bar);
Button button1 = (Button) mToolbar.findViewById(R.id.button1);
Button button2 = (Button) mToolbar.findViewById(R.id.button2);
Button button3 = (Button) mToolbar.findViewById(R.id.button3);
Button button4 = (Button) mToolbar.findViewById(R.id.button4);
Вы можете использовать этот метод для создания пользовательской панели инструментов по своему усмотрению. Вероятно, вы захотите использовать относительный макет.
Ответ 3
Вы должны попытаться применить любое выравнивание для макета родителей.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<Button ...any attributes.../>
...any items...
</LinerLayout>
Ответ 4
Я знаю, что это решение ужасно, но для меня это работает.
Во-первых, в LinearLayout вы можете разместить 3 панели инструментов вместо 1:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.v7.widget.Toolbar android:id="@+id/bottomToolbarLeft"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:layout_weight="1.0"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<android.support.v7.widget.Toolbar android:id="@+id/bottomToolbarCenter"
android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<android.support.v7.widget.Toolbar android:id="@+id/bottomToolbarRight"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:layout_weight="1.0"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</LinearLayout>
Каждая панель инструментов должна иметь собственный ресурс меню.
Тогда вы получите что-то вроде этого:
Иконки центрированы, но значок слева не выровнен по левому краю
Наконец, чтобы выровнять левый значок, вы можете просто установить этот параметр для левой панели инструментов:
android:layoutDirection="rtl"
Результат:
Требуемый порядок
Ответ 5
вы можете сделать это программно следующим образом:
mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ImageView imageView = (ImageView)mToolbar.findViewById(R.id.logo);
if( mToolbar == null ){
return;
}
int toolbarWidth = mToolbar.getWidth();
int imageWidth = imageView.getWidth();
imageView.setX((toolbarWidth-imageWidth)/2);
}
});
настройте свой layout_toolbar.xml:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
style="@style/Toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
android:background="@drawable/toolbar_background"
android:focusable="false"
app:titleTextAppearance="@style/AppTheme.Toolbar.Title">
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/toolbar_logo"/>
</android.support.v7.widget.Toolbar>
Ответ 6
Возможно, вам помогут:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbarPath"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary">
<ImageView
android:id="@+id/imgBack"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="left"
android:layout_marginBottom="4dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="4dp"
android:src="@drawable/ic_action_back" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/imgClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:src="@drawable/ic_action_discard" />
<ImageView
android:id="@+id/imgStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:src="@drawable/ic_action_stop" />
<ImageView
android:id="@+id/imgPath"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:src="@drawable/ic_action_merge" />
<ImageView
android:id="@+id/imgToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_map" />
</LinearLayout>
<ImageView
android:id="@+id/imgForward"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="right"
android:layout_marginBottom="4dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="4dp"
android:src="@drawable/ic_action_forward" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mapPath"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/appBar" />
</RelativeLayout>
В вашем style.xml
напишите:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Затем в manifest.xml
:
<application
android:name="com.ir.zanis.app.AppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar"> <===See here===
.......
.............
.............