툴바 탐색 햄버거 아이콘 누락
Drawer / DrawerToggle을 사용하여 햄버거 아이콘 whitout을 표시하고 Android에 포함 된 기본 아이콘을 사용하는 방법을 찾고 있습니다.
설정 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
하면 뒤로 화살표가 표시되지만 hambuerger는 표시되지 않습니다. Stackoverflow의 다른 게시물 (예 : this 또는 this )은 DrawerLayout 또는 사용자 정의 드로어 블을 사용합니다. Android 소스에서 햄버거 아이콘에 대한 벡터 또는 png를 찾을 수 없습니다.
Android / 지원 라이브러리에서 원래 햄버거 아이콘을 어떻게 찾을 수 있는지 알고 있나요? (또는 표시 방법)
참고 : 벡터 및 png는 google.com/design 웹 사이트에서 찾을 수 있습니다. http://www.google.com/design/spec/resources/sticker-sheets-icons.html#
내 활동에서
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(LOG_TAG, "navigation clicked");
}
});
레이아웃 파일
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar"/>
Styles.xml
<!-- Base application theme. -->
<style name="Theme.AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primaryDef</item>
<item name="colorPrimaryDark">@color/primaryDarkDef</item>
<item name="colorAccent">@color/primaryDef</item>
<!-- Remove the actionbar shadow-->
<item name="android:windowContentOverlay">@null</item>
</style>
롤리팝과 같은 서랍을 사용하고 싶다면 정적 인 이미지가 아니라고 말씀 드리겠습니다. 이 이미지는라는 클래스에 의해 실시간으로 그려집니다 DrawerArrowDrawableToggle
. 따라서 "햄버거"아이콘이 없습니다.
그러나 애니메이션이없는 햄버거 아이콘을 원한다면 여기에서 찾을 수 있습니다.
https://material.io/tools/icons/?icon=menu&style=baseline
애니메이션 햄버거 아이콘을 사용하려면와 DrawerLayout
함께 사용 하고 ActionBarDrawerToggle
및에 대한 아이콘을 활성화 해야 ActionBar
합니다 ActionBarDrawerToggle
.
예:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle mDrawerToggle;
setSupportActionBar(toolbar);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null)
{
actionBar.setDisplayHomeAsUpEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.hello_world, R.string.hello_world)
{
public void onDrawerClosed(View view)
{
supportInvalidateOptionsMenu();
//drawerOpened = false;
}
public void onDrawerOpened(View drawerView)
{
supportInvalidateOptionsMenu();
//drawerOpened = true;
}
};
mDrawerToggle.setDrawerIndicatorEnabled(true);
drawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
}
또한 다음 메서드를 활동에 추가해야합니다.
@Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
이를 위해 몇 줄에 쓰기 만하면됩니다.
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
toggle.setDrawerIndicatorEnabled (true); 이것이 거짓이면 참으로 만들거나이 줄을 제거하십시오.
이와 같이 햄버거 아이콘에 대한 자신의 드로어 블을 만들 수 있습니다.
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#ffffff"
android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z" />
</vector>
그런 다음 조각 / 활동에서
getSupportActionBar().setHomeAsUpIndicator(R.drawable.as_above);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
다른 드로어 블의 경우 도움이 될 수 있습니다. https://github.com/google/material-design-icons/blob/master/navigation/drawable-anydpi-v21/
나는 같은 문제가 있었고 여기에서 가장 간단한 해결책을 찾았습니다.
appcompatv7-v21-navigation-drawer-not-showing-hamburger-icon
내가해야 할 일은 다음과 같이 전화하는 것뿐이었습니다.
mDrawerToggle.syncState();
나를 위해 일한 가장 간단한 솔루션이 있습니다.
는 ActionBarDrawerToggle
두 가지 유형의 생성자가 있습니다. 그중 하나는 도구 모음 을 매개 변수로 사용합니다. 그 (아래 두 번째)를 사용하여 애니메이션 햄버거 를 얻으십시오 .
ActionBarDrawerToggle(this, mDrawerLayout, R.string.content_desc_drawer_open,
R.string.content_desc_drawer_close);
ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.content_desc_drawer_open,
R.string.content_desc_drawer_close);` //use this constructor
나는 같은 문제가 있었다. ToolBar
탐색 아이콘을 얻은 다음 설정
final android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.blablabla);
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitle("title");
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_list);
뒤로 화살표 사용 숨기기
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false);
그런 다음 웹에서 햄버거 아이콘을 찾으십시오-> 햄버거
마지막으로 작업 표시 줄 메서드를 사용하여 프로젝트에서이 드로어 블을 설정합니다.
getSupportActionBar().setLogo(R.drawable.hamburger_icon);
시도해 볼 수는 있지만 화살표와 햄버거 아이콘 사이의 애니메이션이 손실됩니다.
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
super.setContentView(R.layout.activity_menu_drawer_left);
_drawerToggle = new ActionBarDrawerToggle(this, _drawerLayout, R.string.drawer_opened, R.string.drawer_closed) {
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
changeDrawerIconOnDrawerClick(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
}
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
changeDrawerIconOnDrawerClick(R.drawable.ic_drawer);
}
};
//to change default icon to hamburger item initially
changeDrawerIconOnDrawerClick(R.drawable.ic_drawer); }
private void changeDrawerIconOnDrawerClick(int resourceId) {
//Drawable icon = ContextCompat.getDrawable(getApplicationContext(), resourceId);
Drawable icon = ResourcesCompat.getDrawable(getResources(), resourceId, null);
icon.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
_drawerToggle.setDrawerIndicatorEnabled(false);
_drawerToggle.setHomeAsUpIndicator(icon);
}
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
그것은 나와 함께 일한다
기본 위쪽 화살표를 자신의 드로어 블로 교체
getSupportActionBar().setHomeAsUpIndicator(R.drawable.hamburger);
onCreate 메소드에 다음을 추가하십시오.
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, mDrawer, mToolbar, R.string.home_navigation_drawer_open, R.string.home_navigation_drawer_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
}
};
mDrawer.addDrawerListener(toggle);
toggle.syncState();
및 strings.xml에서
<string name="home_navigation_drawer_open">Open navigation drawer</string>
<string name="home_navigation_drawer_close">Close navigation drawer</string>
MyActionBarDrawerToggle에서이 생성자를 사용합니다.
public MyActionBarDrawerToggle(AppCompatActivity host, DrawerLayout drawerlayout, SupportToolbar toolbar, int openedResource, int closedResource)
: base(host, drawerlayout, toolbar, openedResource, closedResource)
{
mHostActivity = host;
mOpenedResource = openedResource;
mClosedResource = closedResource;
}
mainActivity에서이 메서드를 호출합니다 (AppCompatActivity 사용).
mDrawerToggle = new MyActionBarDrawerToggle(
this, //Host Activity
mDrawerLayout, //DrawerLayout
mToolbar, //Toolbar
Resource.String.openDrawer, //Opened Message
Resource.String.closeDrawer //Closed Message
);
mDrawerLayout.AddDrawerListener(mDrawerToggle);
SupportActionBar.SetHomeButtonEnabled(true);
SupportActionBar.SetDisplayShowTitleEnabled(true);
mDrawerToggle.DrawerIndicatorEnabled = true;
mDrawerToggle.SyncState();
에서 onCreate()
:
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
supportInvalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
supportInvalidateOptionsMenu();
}
};
drawerLayout.setDrawerListener(drawerToggle);
drawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Backstack.get(MainActivity.this).goBack();
}
});
//actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
//getSupportActionBar().setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setHomeButtonEnabled(true);
그리고 UP 내비게이션을 설정할 때 :
private void setupViewsForKey(Key key) {
if(key.shouldShowUp()) {
drawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
else {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
drawerToggle.setDrawerIndicatorEnabled(true);
}
drawerToggle.syncState();
참고 URL : https://stackoverflow.com/questions/28071763/toolbar-navigation-hamburger-icon-missing
'Development Tip' 카테고리의 다른 글
ON DUPLICATE KEY를 사용하여 삽입하려는 모든 것을 업데이트하는 방법이 있습니까? (0) | 2020.11.07 |
---|---|
SQL 쿼리 결과가 임시 테이블에 삽입되는 방법은 무엇입니까? (0) | 2020.11.07 |
재정의 된 가상 메서드의 '기본 구현'을 어떻게 호출 할 수 있습니까? (0) | 2020.11.07 |
C ++에서 단항 빼기 연산자를 오버로드하는 방법은 무엇입니까? (0) | 2020.11.07 |
log4net은이 로그 파일을 어디에 생성합니까? (0) | 2020.11.07 |