Android : 작업 표시 줄의 사용자 정의 레이아웃에서 왼쪽 여백 제거


269

사용자 지정 작업 표시 줄보기를 사용하고 있으며 아래 스크린 샷에서 볼 수 있듯이 작업 표시 줄에 빈 회색 공간이 있습니다. 제거하고 싶습니다.

여기에 이미지 설명을 입력하십시오

내가 무슨 짓을 한:

입술 / 값 -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>

명백한

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

주요 활동

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

최근 게시물을 찾았습니다. 최신 릴리스에 문제가 있음을 나타냅니다. 또한 ADT 및 SDK를 Android 5로 업데이트했습니다.

부모를 채우지 않는 Android ActionBar의 사용자 정의보기

어떻게해야할지 모르겠습니다.

편집 (부분 솔루션) :

Android <= API 10에서 작동하지 않습니다.

Android Lollipop, AppCompat ActionBar 사용자 정의보기가 전체 화면 너비를 차지하지 않습니다

내가 바꾼 내용 :

최신 SDK 버전을 사용하십시오.

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

추가 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
@Zbarcea 그것은 내 끝에서 작동하지 않습니다. android : toolbarStyle IDE에 대한 api 레벨 21 분은 11 분입니다.이 솔루션이 작동합니까?
프로그래머

답변:


609

Toolbarvia XML을 추가하는 경우 XML 속성을 추가하여 컨텐츠 삽입을 제거 할 수 있습니다.

<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의 'app'부분이없는 모든 사람을위한 것입니다.
Prakash

3
"app :"와 "android :"를 사용하는 것의 차이점은 무엇입니까?
마이크로

3
그것들은 다른 네임 스페이스입니다. "android"네임 스페이스는 전통적으로 Android OS에서 정의한 모든 속성에 사용됩니다. "앱"네임 스페이스는 일반적으로 라이브러리를 가져 오거나 attrs.xml 파일에 자신을 추가하여 앱에서 정의한 속성에 사용됩니다. 네임 스페이스 "handle"은 원하는대로 될 수 있으며 루트 레이아웃 또는이 경우 레이아웃 요소 자체에서 xmlns 속성을 사용하여 정의됩니다. 원한다면 "xmlns : nougat"로 만들 수 있습니다. 즉, Android 데이터 바인딩에서 일반적으로 bindingAdapters에 "바인드"를 사용합니다.
LukeWaggoner 2016 년

@idratherbeintheair 공기 툴바에 검색보기가 있지만 가시성을 사용하여 숨기면 테두리가 검색보기의 경계를 의미하여 툴바에 국경이 계속 표시됩니다. 그것에 대한 아이디어가 있습니까?
Jay Rathod RJ 7:26에

24
내 경우의 설계 XML로이 속성을 추가하면 android.support.v7.widget.Toolbar: app:contentInsetStartWithNavigation="0dp"충분했다.
컴퓨팅

198

이 시도:

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

나는이 코드를 내 프로젝트에서 사용했다.


4
우수한! parent.setContentInsetsAbsolute (0,0)가 트릭을 수행합니다!
Bam

7
작동합니다. 그러나 레이아웃을 약간 변경할 수 있습니다. 또는 actionBar.setCustomView(R.layout.app_title_bar); Toolbar parent =(Toolbar) actionBar.getCustomView().getParent(); parent.setContentInsetsAbsolute(0,0);레이아웃을 팽창시키지 않고 할 수 있습니다 .
Markymark

내 문제 는 약간 다르지만 나를 위해 일하지 않습니다 .
Solace

setContentInsetsAbsolute 함수는 SDK> 21 인 경우에만 지원됩니다. 모든 솔루션
Pramod J George 2011

11
parent.setPadding(0, 0, 0, 0);태블릿도 추가해야 함
Alexandre G

47

왼쪽 삽입은 툴바에 의해 발생 contentInsetStart하며 기본적으로 16dp입니다.

키라 인에 맞게 이것을 변경하십시오.

지원 라이브러리 v24.0.0 업데이트 :

머티리얼 디자인 사양과 일치시키기 위해 contentInsetStartWithNavigation기본적으로 16dp 인 추가 속성 이 있습니다. 탐색 아이콘이있는 경우이를 변경하십시오.

이것은 디자인 라이브러리 버전 24에 도입 된 새로운 머티리얼 디자인 사양의 일부인 것으로 나타났습니다.

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

그러나 툴바 위젯에 다음 속성을 추가하여 추가 공간을 제거 할 수 있습니다.

app:contentInsetStartWithNavigation="0dp"

전 : 여기에 이미지 설명을 입력하십시오

후 : 여기에 이미지 설명을 입력하십시오


이 솔루션은 Android Jetpack (androidx)을 사용하여 저에게 효과적이었습니다.
Francisc0

27

코드에 따라 toolbarStyle을 변경하는 다른 해상도 (reference appcompat-v7)를 찾았습니다.

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


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

나를 도울 수 있다면 이 stackoverflow.com/questions/31359608/…을 살펴보십시오 .
Prashant Kedia

내가 확인하고 당신을 알려줄 것이다
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">

이것으로 충분해야합니다.


11

styles.xml을 수정하십시오.

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

8

레이아웃에 툴바를 추가하는 대신 아래와 같이 사용자 정의보기를 설정할 수 있습니다.

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

7

app:contentInsetStart="0dp"왼쪽 공간을 제거하려면 툴바 에만 추가 하십시오.

툴바 정의는 다음과 같습니다

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

그리고 이것처럼

여기에 이미지 설명을 입력하십시오


4

사용 AppCompatAcitivty하면 바로 사용할 수 있습니다

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

툴바에이 행 app2 : contentInsetStart = "0dp"를 추가해야합니다.

<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
나를 위해 app:contentInsetStart="0dp"
Adil Soomro

1

나는 어디에서나 내 문제 (첫 번째 그림)에 대한 해결책을 찾지 못했지만 마침내 몇 시간 동안 파고 든 후에 가장 간단한 해결책을 얻었습니다. app:setInsetLeft="0dp"등 의 많은 XML 속성을 사용해 보았지만 이 경우 도움이되지 못했습니다.

그림 1 여기에 이미지 설명을 입력하십시오

다음 코드는 그림 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);
}

그림 2

여기에 이미지 설명을 입력하십시오


1

툴바에서 "contentInset ..."속성을 0으로 설정해도 작동하지 않습니다. 스타일을 업데이트하는 Nilesh Senta의 솔루션이 작동했습니다!

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>

자바 (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

다음과 같이 툴바를 만드십시오 :

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

자세한 내용은이 링크를 참조하십시오 -Android Tips


0

android:padding="0dp"나를 위해 일을 추가

<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

XML 파일의 툴바보기 그룹 내에서 상대적 레이아웃을 사용하고 사용 사례에 따라 위젯의 위치를 ​​조정할 수 있습니다. 사용자 정의 레이아웃을 만들고 팽창시키고 툴바에 연결할 필요가 없습니다. Java 코드에서 완료되면 레이아웃에서 지원 조치 막대로 설정하기 전에 툴바 오브젝트와 함께 setContentInsetsAbsolute (0,0)을 사용하십시오.


0

사용자 지정 작업 표시 줄의 배경색과 일치하도록 앱 작업 ​​표시 줄 스타일에 배경 항목을 추가하는 것이 좋습니다.

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

Android 6.0 이후에는 작업 표시 줄에 여유 공간이있어 설정할 수 없습니다. 다음과 같이 활동에서 오른쪽 여백 조정을 추가하십시오 ( 보기 는 사용자 정의 된 조치 표시 줄 또는 오른쪽 단추입니다).

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

액션 바 마케 니즘은 Android 3.0 이상 앱 이후에 지원됩니다. 대신 (lib v7을 지원하는) 툴바를 사용하는 경우 각 활동의 각 xml에서 툴바를 레이아웃하고 Android 5.0 이상 디바이스에서 시스템 상태 표시 줄과 겹치는 문제를 처리해야합니다.


0

코 틀린

    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

나를위한이 일

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

0

툴바의 문서를 확인하면 기본적으로 스타일이 정의되고 contentInsetStart 항목이 있습니다.

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

이 패딩을 대체하려면 두 가지 방법으로 수행 할 수 있습니다.

1. 스타일을 재정의하고 contentInsetStart 및 contentInsetEnd 값으로 자신의 스타일을 추가하십시오.

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

2. XML에서 contentInsetStart 및 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>

-1

앱이 Android 5를 지원합니까? 지원하지 않으면 지원 작업 표시 줄 v7 버전을 다운 그레이드 할 수 있습니다. 다음과 같습니다.

'com.android.support:appcompat-v7:19.0.+'컴파일 (v7 : 21+는 사용하지 마십시오)

또한 응용 프로그램의 대상 버전을 21 미만으로 만듭니다.

targetSdk 버전 14

앱이 android 5->를 지원하는 경우 사용자 정의 툴바가 필요합니다. (appcombat-v7 : 21은 약간의 변경 사항이 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.