Android: İşlem çubuğunun özel mizanpajından sol kenar boşluğunu kaldırın


269

Özel bir işlem çubuğu görünümü kullanıyorum ve aşağıdaki ekran görüntüsünde de görebileceğiniz gibi, işlem çubuğunda boş bir gri alan var. Kaldırmak istiyorum.

resim açıklamasını buraya girin

Ben ne yaptım:

res / değerler 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 / değerler / 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>

Belirgin

<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>

Ana aktivite

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);
}

Son bir gönderi buldum, bu son sürümde bir sorun olduğunu gösteriyor. Ayrıca ADT ve SDK'yı Android 5'e güncelledim.

Android ActionBar'ın özel görünümü üst öğeyi doldurmuyor

Ne yapmam gerektiğini bilmiyorum.

Düzenleme (kısmi çözüm):

Android'de çalışmıyor <= API 10.

Android Lollipop, AppCompat ActionBar özel görünümü tüm ekran genişliğini kaplamıyor

Ne değiştirdim:

En son SDK sürümünü kullanın:

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

Bir ekle 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>

1

1
@Zbarcea Sonunda çalışmıyor. ve android için: toolbarStyle IDE şikayetleri 21 dk 11 api seviyesi gerektirir hakkında. Bu çözüm u için çalışıyor mu?
Programcı

Yanıtlar:


609

ToolbarÜzerinden XML ekliyorsanız, içerik eklerini kaldırmak için XML nitelikleri ekleyebilirsiniz.

<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" />

2
xmlns: app =" schemas.android.com/apk/res-auto xml'nin 'app' bölümünü eksik olan herkes için.
Prakash

3
"App:" ve "android:" .. arasındaki fark nedir?
Micro

3
Bunlar farklı ad alanları. "android" ad alanı geleneksel olarak Android işletim sistemi tarafından tanımlanan tüm özellikler için kullanılır. "Uygulama" ad alanı geleneksel olarak, uygulamanız tarafından kitaplıkları içe aktarma yoluyla veya attrs.xml dosyasına kendinizinkini ekleyerek tanımlanan özellikler için kullanılır. Ad alanı "tanıtıcı" olmasını istediğiniz şey olabilir, kök düzeninizdeki xmlns özniteliği veya bu durumda düzen öğesinin kendisi kullanılarak tanımlandığını unutmayın. İsterseniz "xmlns: nougat" yapabilirsiniz. yani Android veritabanında, genellikle bağlamaAdapters için "bağlama" kullanın.
LukeWaggoner

@idratherbeintheair Araç çubuğunda bir arama görünümüm var, ancak görünürlük kullanarak gizlediğimde sınır arama görünümünün sınırı anlamına gelir. bunun hakkında bir fikrin var mı?
Jay Rathod RJ

24
benim durumumda, tasarım xml bu özellik ekleyerek android.support.v7.widget.Toolbar: app:contentInsetStartWithNavigation="0dp"yeterliydi.
computingfreak

198

bunu dene:

    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);

Bu kodu projemde kullandım, iyi şanslar;


4
Mükemmel! parent.setContentInsetsAbsolute (0,0) işinizi görüyor!
Bam

7
Bu çalışıyor. Ancak, düzeni biraz değiştirebilir. Alternatif olarak, actionBar.setCustomView(R.layout.app_title_bar); Toolbar parent =(Toolbar) actionBar.getCustomView().getParent(); parent.setContentInsetsAbsolute(0,0);düzeni şişirmek yerine yapabilirsiniz .
Markymark

Benim için çalışmıyor, sorunum biraz farklı olsa da .
Solace

SetContentInsetsAbsolute işlevi yalnızca SDK> 21 ise desteklenir. Herhangi bir çözüm
Pramod J George

11
parent.setPadding(0, 0, 0, 0);tabletler için de eklemek zorunda kaldım
Alexandre G

47

Sol iç metin, Araç Çubuğu'ndaki contentInsetStart metin, varsayılan olarak 16dp olan Çubukları'ndan kaynaklanır.

Keyline hizalamak için bunu değiştirin.

Destek kütüphanesi v24.0.0 güncellemesi:

Materyal Tasarımı spesifikasyonuna uyması için ek bir özellik daha vardır contentInsetStartWithNavigation varsayılan olarak 16dp olan vardır. Ayrıca bir gezinme simgeniz varsa bunu değiştirin.

Bunun, Tasarım kütüphanesinin 24. sürümünde tanıtılan yeni bir Malzeme Tasarımı Spesifikasyonu'nun bir parçası olduğu ortaya çıktı.

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

Ancak, Araç Çubuğu widget'ına aşağıdaki özelliği ekleyerek fazladan alanı kaldırmak mümkündür.

app:contentInsetStartWithNavigation="0dp"

Önce : resim açıklamasını buraya girin

Sonra: resim açıklamasını buraya girin


Bu çözüm Android Jetpack (androidx) kullanarak benim için işe yaradı
Francisc0

27

Aşağıdaki kodu toolbarStyle değiştiren başka bir çözünürlük (başvuru appcompat-v7) buldum:

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


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>

Bana yardımcı olabilirseniz, lütfen bu stackoverflow.com/questions/31359608/… adresine bakın .
Prashant Kedia

i will kontrol ve let sen konw
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">

Bu yeterince iyi olmalı.


11

Sadece stillerinizi değiştirin .xml

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

8

Düzene bir araç çubuğu eklemek yerine, özel görünümünüzü aşağıda gösterildiği gibi ayarlayabilirsiniz.

Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);

7

Yalnızca app:contentInsetStart="0dp"araç çubuğuna ekleyin ve bu boş alanı kaldırın.

Böylece Araç Çubuğu tanımınız şöyle görünür

 <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">

ve şuna benziyor

resim açıklamasını buraya girin


4

Kullanarak AppCompatAcitivtysadece kullanabilirsiniz

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);

3

Bu satırı araç çubuğunuza app2: contentInsetStart = "0dp" eklemeniz gerekiyor

<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"/>

2
Benim için app:contentInsetStart="0dp"
Adil Soomro

1

Sorunum için bir çözüm bulamadım (ilk resim), ama sonunda birkaç saat kazdıktan sonra en basit bir çözüm buldum. Bir çok xml özelliği ile denediğimi lütfen unutmayınapp:setInsetLeft="0dp" , vb. ama hiçbiri bu durumda yardımcı olmadı.

Resim 1 resim açıklamasını buraya girin

aşağıdaki kod Resim 2'deki gibi bu sorunu çözdü

@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);
}

Resim 2

resim açıklamasını buraya girin


1

Araç Çubuğu'nda "contentInset ..." niteliklerini 0 olarak ayarlamak benim için çalışmadı. Nilesh Senta'nın tarzı güncelleme çözümü çalıştı!

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);

0

Bunun gibi araç çubuğu oluşturun:

<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>

daha fazla bilgi için lütfen bu bağlantıyı takip edin - Android İpuçları


0

sadece android:padding="0dp"benim için iş ekliyorum

<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">

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);

0

Sadece xml dosyanızdaki araç çubuğu görünüm grubunda göreceli düzeni kullanabilir ve widget'ların konumlarını kullanım durumunuz için istediğiniz gibi ayarlayabilirsiniz. Java kodunuzda tamamlandıktan sonra, düzeninizde destek eylem çubuğu olarak ayarlamadan önce araç çubuğu nesnenizle setContentInsetsAbsolute (0,0) kullanın.


0

Özelleştirilmiş işlem çubuğunun arka plan rengiyle tutarlı olması için uygulama işlem çubuğu stiline bir arka plan öğesi eklemek daha iyi olur:

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

Android 6.0'dan sonra, eylem çubuğunun kenar boşluğu alanı bile vardır ve ayarlanamaz. Etkinliğe aşağıdaki gibi bir sağ kenar boşluğu ayarı ekleyin : ( görünüm , özelleştirilmiş işlem çubuğu veya içindeki bir sağ düğmedir)

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);

Actionbar makineciliği sadece Android 3.0+ uygulamasından sonra desteklenir. Bunun yerine bir araç çubuğu (lib v7 desteği) kullanırsak, onu her etkinliğin her bir xml'sinde düzenlemeli ve Android 5.0 veya sonraki bir cihazdaki sistem durum çubuğuyla örtüşme sorunuyla ilgilenmeliyiz.


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)

0

bu iş benim için

toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);

0

Araç çubuğunun belgelerini kontrol ederseniz, varsayılan olarak stil tanımlanır ve bir contentInsetStart öğesi vardır.

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

Bu dolguyu geçersiz kılmak istiyorsanız, iki şekilde yapılabilir.

1. stili geçersiz kılın ve contentInsetStart ve contentInsetEnd değerleriyle kendi stilinizi ekleyin

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

XML'de doğrudan contentInsetStart ve contentInsetEnd değerlerini tanımlayabilirsiniz

<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>

-1

Uygulamanız android 5'i destekliyor mu? Desteklenmiyorsa, destek eylem çubuğu v7'nin sürümünü düşürebilirsiniz. Bu şey gibi:

'com.android.support:appcompat-v7:19.0.+' derleyin (v7: 21+ kullanmayın)

ayrıca uygulamanın hedef sürümünü 21'den az yapın.

targetSdkVersion 14

Uygulamanız android 5'i destekliyorsa -> özel Araç Çubuğuna ihtiyacınız olacaktır. (Appcombat-v7: 21'de bir değişiklik var).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.