Android: 작업 표시줄의 사용자 지정 레이아웃에서 왼쪽 여백 제거
사용자 지정 작업 표시줄 뷰를 사용하고 있으며, 아래 스크린샷에서 볼 수 있듯이 작업 표시줄에 회색 공백이 있습니다.그것을 제거하고 싶습니다.
내가 무슨 짓을 한 일:
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>
매니페스트
<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 Rollipop, AppCompat ActionBar 사용자 지정 보기가 전체 화면 너비를 차지하지 않음
변경된 내용:
최신 sdk 버전 사용:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="21" />
추가 atoolbarStyle
:
<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>
추가하는 경우Toolbar
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" />
사용해 보십시오.
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);
왼쪽 삽입은 도구 모음의contentInsetStart
기본값은 16dp입니다.
키라인에 맞추려면 이 옵션을 클릭합니다.
지원 라이브러리 v24.0.0 업데이트:
재료 설계 사양과 일치하도록 추가 속성이 있습니다.contentInsetStartWithNavigation
기본값은 16dp입니다.탐색 아이콘도 있는 경우 이 옵션을 변경합니다.
이것은 디자인 라이브러리 버전 24에 도입된 새로운 재료 설계 사양의 일부로 밝혀졌습니다.
https://material.google.com/patterns/navigation.html
그러나 다음 속성을 도구 모음 위젯에 추가하여 추가 공간을 제거할 수 있습니다.
app:contentInsetStartWithNavigation="0dp"
툴바Style을 변경하는 다른 해상도(참조 appcompat-v7)를 찾았습니다. 코드는 다음과 같습니다.
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
그냥 추가app:contentInsetStart="0dp"
도구 모음의 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:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
android:paddingLeft="0dp">
이 정도면 충분할 겁니다.
styles.xml만 수정합니다.
<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
추가만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">
그리고 이것은 이렇게 보입니다.
레이아웃에 도구 모음을 추가하는 대신 아래와 같이 사용자 정의 보기를 설정할 수 있습니다.
Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
도구 모음의 설명서를 확인하면 기본적으로 스타일이 정의되어 있고 항목 내용이 있습니다.시작을 삽입합니다.
<item name="contentInsetStart">16dp</item>
이 패딩을 재정의하려면 두 가지 방법으로 할 수 있습니다.
1. 스타일을 재정의하고 콘텐츠로 자신만의 스타일을 추가합니다.시작 및 내용 삽입끝 값 삽입
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
2. XML에서 컨텐츠를 직접 정의할 수 있습니다.시작 및 내용 삽입끝 값 삽입
<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>
용사를 합니다.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);
도구 모음에 이 줄 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"/>
xml에서 도구 모음 태그에 대해 다음 두 가지 특성을 추가합니다.
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp"
내부 코드는 다음 행을 추가합니다.
// remove extra padding of toolbar
toolbar.setContentInsetsAbsolute(0, 0);
toolbar.setPadding(0, 0, 0, 0);
모바일 장치와 태블릿 장치 모두에서 테스트되었습니다.
나를 위한 이 일
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);
내용 설정 중삽입...툴바의 0에 대한 특성은 나에게 효과가 없었습니다.스타일 업데이트를 위한 나일시 센타의 솔루션이 작동했습니다!
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(생성 시)
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);
코틀린
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)
제 문제(첫 번째 사진)에 대한 해결책을 어디에서도 찾지 못했지만, 몇 시간 동안 파헤친 끝에 결국 가장 간단한 해결책이 나왔습니다.는 다과같많은은속 xml다시니도와 같은 xml .app:setInsetLeft="0dp"
중 도 이이 되지 않았습니다. 하지만 그들 중 아무도 이 사건에 도움이 되지 않았습니다.
그림 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
다음과 같은 도구 모음 만들기:
<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 팁
만 추가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">
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);
xml 파일에서 도구 모음 보기 그룹 내의 상대 레이아웃을 사용하고 사용 사례에 필요한 대로 위젯의 위치를 조정할 수 있습니다.사용자 지정 레이아웃을 만들고 확장하여 도구 모음에 부착할 필요가 없습니다.Java 코드가 완료되면 setContent를 사용합니다.레이아웃에서 지원 수행 표시줄로 설정하기 전에 도구 모음 개체에 Absolute(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+ 앱 이후에 지원됩니다.(support lib v7의) 도구 모음을 대신 사용하는 경우 각 작업의 각 xml에 배치하고 Android 5.0 이상 장치의 시스템 상태 표시줄과 중복되는 문제를 처리해야 합니다.
언급URL : https://stackoverflow.com/questions/27354812/android-remove-left-margin-from-actionbars-custom-layout
'programing' 카테고리의 다른 글
오라클에서 행이 있는지 확인하는 가장 빠른 쿼리? (0) | 2023.08.22 |
---|---|
PowerShell에서 $null 어레이를 테스트하는 방법 (0) | 2023.08.22 |
각도 - 관찰 가능한 비동기 파이프 사용각도 - 관찰 가능한 비동기 파이프 사용html의 로컬 변수에 바인딩합니다.html의 로컬 변수에 바인딩합니다.안녕하세요. 많은 속성(이름, 제목, 주소...)을 .. (0) | 2023.08.22 |
애플리케이션 컨텍스트 초기화 이벤트에 후크를 추가하는 방법은 무엇입니까? (0) | 2023.08.22 |
Gitflow 릴리스 분기 및 태그 - "v" 접두사 사용 여부와 상관없이 (0) | 2023.08.22 |