【问题标题】:Android Toolbar - Change height and width of Navigation Icon ProgrammaticallyAndroid 工具栏 - 以编程方式更改导航图标的高度和宽度
【发布时间】:2016-07-05 10:51:26
【问题描述】:

我想以编程方式更改 Android 工具栏中导航图标的高度和宽度(屏幕截图中的黑色圆圈)。有没有办法这样做。这不是工具栏徽标。我无法在 Styles xml 中更新工具栏主题,因为我希望它是动态的。请帮忙。

【问题讨论】:

  • 您尝试更改它吗?发布您的代码,以便我们为您提供更多帮助
  • 它正在通过 xml 更改,但我无法动态更新 xml。我希望它是动态完成的。
  • @anuja_k 你要改哪个图标,可以提供截图吗,我帮你?
  • 添加了参考图片@YasinKaçmaz
  • @anuja_k 更新了我的自定义工具栏视图和原始答案

标签: android android-toolbar


【解决方案1】:

我是这样做的:

toolbar= (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(getSupportActionBar()!=null){
    Drawable drawable= getResources().getDrawable(R.drawable.ic_sync_white_36dp);
    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
    Drawable newdrawable = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 250, 250, true));
    newdrawable.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(newdrawable);

}

您可以在创建缩放位图时使用calculate-dp-from-pixels-in-android-programmaticallyconverting-pixels-to-dp

我的Toolbar

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

还有截图:

另一种方法是在Toolbar 中使用自定义布局,如下所示:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" >
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:background="@color/colorPrimary"
        android:id="@+id/custom_toolbar_layout"
        android:layout_height="wrap_content">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:tint="@android:color/holo_purple"
        android:id="@+id/imageView"
        android:gravity="center_vertical"
        android:src="@drawable/ic_clear_black_36dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="My Custom Toolbar"
        android:gravity="center_vertical"
        android:textSize="20sp"
        android:textColor="@android:color/white"
        android:layout_gravity="center_horizontal" />
    </LinearLayout>
</android.support.v7.widget.Toolbar>

如果您想访问工具栏中的任何视图,请参阅@Aleksandar Stefanović 的回答。您可以查看Material design guidelines 以创建自定义Toolbar

然后截图:

图标来自:Material Icons

【讨论】:

  • @anuja_k 好,我发布了两种方式,也许将来有人会使用它
【解决方案2】:

在 AppCompatActivity 中试试这个

if(getSupportActionBar()!=null){
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  getSupportActionBar().setHomeButtonEnabled(true);
}
toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
    getSupportFragmentManager().popBackStack();
  }});

在xml中

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:background="#434343"
        android:elevation="4dp"
        android:minHeight="90dp"
        app:theme="@style/tool_bar_style" />

在styles.xml中

    <style name="tool_bar_style">
    <item name="colorControlNormal">@color/white</item>
    <item name="android:textColor">@color/text_color_main</item>
    <item name="android:textColorPrimary">@color/text_color_main</item>
    <item name="android:textColorSecondary">@color/text_color_main</item>
    <item name="actionMenuTextColor">@color/text_color_main</item>
    <item name="android:textSize">@dimen/text_size_default</item>
    <item name="android:colorBackground">@color/toolbar_bg_color</item>
    <item name="android:listPreferredItemHeightSmall">@dimen/button_default_height</item>

</style>
<style name="Toolbar.TitleText" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">">
    <item name="android:textSize">@dimen/text_size_big</item>
</style>

在dimens.xml中

    <dimen name="text_size_big">14sp</dimen>
    <dimen name="text_size_default">22sp</dimen>
    <dimen name="button_default_height">90dp</dimen>

颜色

    <color name="text_color_main">@color/clean_white</color>
    <color name="toolbar_bg_color">#434343</color>

【讨论】:

    【解决方案3】:

    如果您使用的是 appcompat 工具栏,它实际上就像一个常规的 ViewGroup。因此,您可以像访问任何其他 ViewGroup 一样轻松访问其中的视图。

    例如,如果您的工具栏中有一个 ImageView,您可以通过以下方式访问它:

            getSupportActionBar().getCustomView().findViewById(R.id.imageView)
    

    从那里,您只需将其调整为常规 ImageView。

    【讨论】:

    • 是的,我正在使用 AppCompat 工具栏。导航图标是否有任何预先声明的 id?
    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多