Android: hapus margin kiri dari tata letak kustom actionbar

269

Saya menggunakan tampilan actionbar khusus, dan seperti yang Anda lihat pada tangkapan layar di bawah ini, ada ruang abu-abu kosong di actionbar. Saya ingin menghapusnya.

masukkan deskripsi gambar di sini

Apa yang telah saya lakukan:

res / values-v11 / styles.xml

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>
</style>

res / values ​​/ my_custom_actionbar.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="android:height">60dp</item>
    </style>
</resources>

Nyata

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="19" />

<application
            android:icon="@drawable/ic_launcher"
            android:label="@string/AppName"
            android:theme="@style/AppBaseTheme" >
    <!-- activities... etc -->
</application>

Aktifitas utama

public void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    ActionBar actionbar = getSupportActionBar();

    actionbar.setDefaultDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayShowCustomEnabled(true);
    actionbar.setDisplayShowHomeEnabled(false);
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setDisplayUseLogoEnabled(false);
    actionbar.setHomeButtonEnabled(false);

    // Add the custom layout
    View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
    actionbar.setCustomView(view);
}

Saya telah menemukan posting baru-baru ini, yang menunjukkan bahwa ada masalah dengan rilis terbaru. Saya juga memperbarui ADT dan SDK ke Android 5.

Tampilan kustom Android ActionBar tidak mengisi induk

Saya tidak tahu apa yang harus saya lakukan.

Edit (solusi sebagian):

Tidak bekerja di Android <= API 10.

Android Lollipop, tampilan khusus AppCompat ActionBar tidak memakan seluruh lebar layar

Apa yang telah saya ubah:

Gunakan versi SDK terbaru:

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="21" />

Tambahkan toolbarStyle:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>

        <item name="android:toolbarStyle">@style/ToolbarStyle</item>
        <item name="toolbarStyle">@style/ToolbarStyle</item>
</style>

<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="contentInsetStart">0dp</item>
    <item name="android:contentInsetStart">0dp</item>
</style>
Zbarcea Christian
sumber
1
Pernahkah kamu melihat posting ini
Kaushik
1
@ Zbarcea Ini tidak berfungsi pada saya. dan untuk android: toolbar IDE keluhan tentang membutuhkan api level 21 min adalah 11. Apakah solusi ini berfungsi untuk Anda?
Programmer

Jawaban:

609

Jika Anda menambahkan Toolbarvia XML, Anda bisa menambahkan atribut XML untuk menghapus inset konten.

<android.support.v7.widget.Toolbar
    xmlns:app="schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/primaryColor"
    android:contentInsetLeft="0dp"
    android:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetEnd="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetEnd="0dp" />
LukeWaggoner
sumber
2
xmlns: app = " schemas.android.com/apk/res-auto " untuk semua orang yang kehilangan bagian 'aplikasi' dari xml.
Prakash
3
Apa perbedaan antara menggunakan "app:" dan "android:" ..?
Micro
3
Mereka ruang nama yang berbeda. namespace "android" secara tradisional digunakan untuk semua atribut yang ditentukan oleh OS Android. Namespace "app" secara tradisional digunakan untuk atribut yang ditentukan oleh aplikasi Anda, baik melalui mengimpor perpustakaan, atau menambahkan milik Anda di file attrs.xml. Perlu diingat bahwa namespace "handle" dapat menjadi apa pun yang Anda inginkan, itu didefinisikan menggunakan atribut xmlns pada tata letak root Anda atau, dalam hal ini, dalam elemen tata letak itu sendiri. Anda bisa membuatnya "xmlns: nougat" jika Anda mau. yaitu Dalam penyatuan data Android, saya biasanya menggunakan "bind" untuk binding Adapters.
LukeWaggoner
@idratherbeintheair Saya memiliki tampilan pencarian di toolbar tetapi ketika saya menyembunyikannya menggunakan visibilitas perbatasan berarti batas tampilan pencarian berarti jenis perbatasan masih ditampilkan pada toolbar. ada ide tentang itu?
Jay Rathod RJ
24
dalam kasus saya, menambahkan atribut ini ke xml desain android.support.v7.widget.Toolbar: app:contentInsetStartWithNavigation="0dp"sudah cukup.
computingfreak
198

coba ini:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null);
    actionBar.setCustomView(customView);
    Toolbar parent =(Toolbar) customView.getParent();
    parent.setPadding(0,0,0,0);//for tab otherwise give space in tab
    parent.setContentInsetsAbsolute(0,0);

Saya menggunakan kode ini dalam proyek saya, semoga berhasil;

cocotyty
sumber
4
Luar biasa! parent.setContentInsetsAbsolute (0,0) melakukan trik!
Bam
7
Ini bekerja. Namun, itu bisa mengubah tata letak sedikit. Atau, Anda dapat melakukan actionBar.setCustomView(R.layout.app_title_bar); Toolbar parent =(Toolbar) actionBar.getCustomView().getParent(); parent.setContentInsetsAbsolute(0,0);daripada menggembungkan tata letak.
Markymark
Tidak bekerja untuk saya, meskipun masalah saya hanya sedikit berbeda.
Solace
Fungsi setContentInsetsAbsolute hanya didukung jika SDK> 21. Solusi apa pun
Pramod J George
11
harus menambahkan parent.setPadding(0, 0, 0, 0);untuk tablet juga
Alexandre G
47

contentInsetStartInset kiri disebabkan oleh Toolbar yang secara default 16dp.

Ubah ini untuk menyelaraskan ke baris kunci.

Pembaruan untuk perpustakaan dukungan v24.0.0:

Untuk mencocokkan spesifikasi Material Design ada atribut tambahan contentInsetStartWithNavigationyang secara default adalah 16dp. Ubah ini jika Anda juga memiliki ikon navigasi.

Ternyata ini adalah bagian dari Spesifikasi Desain Bahan baru yang diperkenalkan di versi 24 perpustakaan Desain.

https://material.google.com/patterns/navigation.html

Namun, dimungkinkan untuk menghapus ruang tambahan dengan menambahkan properti berikut ke widget Toolbar.

app:contentInsetStartWithNavigation="0dp"

Sebelum : masukkan deskripsi gambar di sini

Setelah: masukkan deskripsi gambar di sini

Naveen Kumar M
sumber
solusi ini yang bekerja untuk saya menggunakan Android Jetpack (androidx)
Francisc0
27

Saya menemukan resolusi lain (referensi appcompat-v7) yang mengubah toolbarStyle, kode berikut:

<item name="toolbarStyle">@style/Widget.Toolbar</item>


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
madhu527
sumber
Silakan lihat stackoverflow.com/questions/31359608/… ini , jika Anda dapat membantu saya.
Prashant Kedia
saya akan memeriksa dan membiarkan Anda tahu
madhu527
14
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
android:paddingLeft="0dp">

Ini seharusnya cukup bagus.

Prakash
sumber
11

Cukup Ubah styles.xml Anda

<!-- ActionBar styles -->
    <style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
        <item name="contentInsetStart">0dp</item>
        <item name="contentInsetEnd">0dp</item>
    </style>
Nilesh Senta
sumber
8

Alih-alih menambahkan bilah alat di tata letak, Anda dapat mengatur tampilan khusus seperti yang ditunjukkan di bawah ini.

Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
Raja Jawahar
sumber
7

Hanya tambahkan app:contentInsetStart="0dp"ke bilah alat untuk menghapus ruang yang tersisa.

Jadi definisi Toolbar Anda terlihat seperti ini

 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    app:contentInsetStart="0dp"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

dan terlihat seperti ini

masukkan deskripsi gambar di sini

Keyur
sumber
4

Menggunakan AppCompatAcitivtyAnda dapat menggunakan hanya dengan

Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
View logo = getLayoutInflater().inflate(R.layout.custom_toolbar, null);
mToolbar.addView(logo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mToolbar.setContentInsetsAbsolute(0,0);
ikan mati
sumber
3

Anda perlu menambahkan baris ini app2: contentInsetStart = "0dp" di bilah alat Anda

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app2="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    app2:contentInsetStart="0dp"/>
Rahul
sumber
2
Bagi saya itu app:contentInsetStart="0dp"
Adil Soomro
1

Saya tidak menemukan solusi untuk masalah saya (gambar pertama) di mana pun, tetapi akhirnya saya berakhir dengan solusi paling sederhana setelah beberapa jam penggalian. Harap dicatat bahwa saya mencoba dengan banyak atribut xml seperti app:setInsetLeft="0dp", dll. Tetapi tidak satupun yang membantu dalam kasus ini.

Gambar 1 masukkan deskripsi gambar di sini

kode berikut menyelesaikan masalah ini seperti pada Gambar 2

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    //NOTE THAT: THE PART SOLVED THE PROBLEM.
    android.support.design.widget.AppBarLayout abl = (AppBarLayout)
            findViewById(R.id.app_bar_main_app_bar_layout);

    abl.setPadding(0,0,0,0);
}

Gambar 2

masukkan deskripsi gambar di sini

mifthi
sumber
1

Mengatur atribut "contentInset ..." ke 0 di Toolbar tidak berfungsi untuk saya. Solusi Nilesh Senta untuk memperbarui gaya berhasil!

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarStyle">@style/Actionbar</item>
    <item name="android:titleTextStyle">@style/ActionbarTitle</item>
</style>

<style name="Actionbar" parent="Widget.AppCompat.ActionBar">
    <item name="contentInsetStart">0dp</item>
    <item name="contentInsetEnd">0dp</item>
</style>

java (onCreate)

ActionBar actionBar =  getSupportActionBar();

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

ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
            ActionBar.LayoutParams.MATCH_PARENT,
            ActionBar.LayoutParams.MATCH_PARENT
    );

View view = LayoutInflater.from(this).inflate(R.layout.actionbar_main, null);

actionBar.setCustomView(view, layoutParams);
Poseidon
sumber
0

Buat bilah alat seperti ini:

<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/menuToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:background="@color/white"
android:contentInsetLeft="10dp"
android:contentInsetRight="10dp"
android:contentInsetStart="10dp"
android:minHeight="?attr/actionBarSize"
android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></android.support.v7.widget.Toolbar>

ikuti tautan ini untuk lebih banyak - Tip Android

Aneh Thakur
sumber
0

hanya menambahkan android:padding="0dp"pekerjaan untukku

<android.support.v7.widget.Toolbar
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:padding="0dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
Pemenang
sumber
0
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
      ab.setDisplayShowCustomEnabled(true);
      setDisplayShowTitleEnabled(true);
      View customView =     getLayoutInflater().inflate(R.layout.activity_main,null); //here activity_main.xml is the GUI design file.
ab.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent(); //use V7 Toolbar import
parent.setContentInsetsAbsolute(0, 0);
setPadding(5,0,0,0);

ab.setIcon(R.mipmap.ic_launcher);

sumber
0

Anda cukup menggunakan tata letak relatif di dalam grup tampilan bilah alat di file xml Anda dan sesuaikan posisi widget saat Anda memerlukannya untuk kasus penggunaan Anda. Tidak perlu membuat tata letak khusus & mengembang dan melampirkan ke bilah alat. Setelah selesai dalam kode java Anda, gunakan setContentInsetsAbsolute (0,0) dengan objek bilah alat Anda sebelum mengaturnya sebagai bilah tindakan dukungan di tata letak Anda.

Soumyadeb Chattopadhyay
sumber
0

Akan lebih baik untuk menambahkan item latar belakang ke dalam gaya bilah tindakan aplikasi agar konsisten dengan warna latar belakang bilah tindakan yang disesuaikan:

<item name="android:background">@color/actionbar_bgcolor</item>

Setelah android 6.0, actionbar bahkan memiliki ruang margin-kanan dan tidak dapat diatur. Tambahkan penyesuaian margin kanan dalam aktivitas seperti ini: ( tampilan adalah bilah tindakan yang disesuaikan atau tombol kanan di dalamnya)

int rightMargin = Build.VERSION.SDK_INT>=Build.VERSION_CODES.M ? 0 : 8; // may the same with actionbar leftMargin in px
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(p.leftMargin, p.topMargin, rightMargin, p.bottomMargin);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
    p.setMarginEnd(rightMargin);
}
view.setLayoutParams(p);

Machenisme actionbar hanya didukung setelah aplikasi Android 3.0+. Jika kita menggunakan bilah alat (dari support lib v7) sebagai gantinya, kita harus tata letak di setiap xml dari setiap aktivitas, dan menangani masalah tumpang tindih dengan bilah status sistem di perangkat Android 5.0 atau yang lebih baru.

Shrdi
sumber
0

Kotlin

    supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM;
    supportActionBar?.setCustomView(R.layout.actionbar);

    val parent = supportActionBar?.customView?.parent as Toolbar
    parent?.setPadding(0, 0, 0, 0)//for tab otherwise give space in tab
    parent?.setContentInsetsAbsolute(0, 0)
Chen Jiling
sumber
0

ini bekerja untuk saya

toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);
Maysam R
sumber
0

Jika Anda memeriksa dokumentasi bilah alat, secara default memiliki gaya yang ditentukan dan ada item contentInsetStart.

<item name="contentInsetStart">16dp</item>

Jika Anda ingin mengganti bantalan ini maka dapat dilakukan dengan dua cara.

1.Timpa gaya dan tambahkan gaya Anda sendiri dengan nilai contentInsetStart dan contentInsetEnd

<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
    <item name="contentInsetStart">0dp</item>
    <item name="contentInsetEnd">0dp</item>
</style>

2.Dalam XML, Anda dapat langsung menentukan nilai contentInsetStart dan contentInsetEnd

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    android:layout_height="?attr/actionBarSize">

    <!--Add your views here-->

</androidx.appcompat.widget.Toolbar>
Sharath kumar
sumber
-1

Apakah aplikasi Anda mendukung Android 5? Jika tidak mendukung maka Anda dapat menurunkan versi dukungan actionbar v7. Itu terlihat seperti:

kompilasi 'com.android.support:appcompat-v7:19.0.+' (Jangan gunakan v7: 21+)

juga membuat versi target aplikasi kurang dari 21.

targetSdkVersion 14

Jika aplikasi Anda mendukung Android 5 -> Anda akan memerlukan ToolBar khusus. (Karena appcombat-v7: 21 ada perubahan).

quangson91
sumber