Android:在工具栏布局中绘制线条/边框?

时间:2015-08-26 07:18:08

标签: android android-layout

我要求appBar看起来像这样:

enter image description here

背景简直是透明的。

我使用此布局获取appBar(隐藏详细信息):

<android.support.v7.widget.Toolbar>
  <TextView>
  <ImageView>
</android.support.v7.widget.Toolbar>

只需在[{1}}下方height=1dp添加ImageViewlayout_gravity="bottom即可。

甚至可以在ToolbarLayout

中绘制线条或边框

3 个答案:

答案 0 :(得分:5)

像这样使用RelativeLayout:

<android.support.v7.widget.Toolbar>
    <RelativeLayout>
         <TextView>
         <ImageView>
         <View  android:layout_width="match_parent" 
                android:layout_height="1dp"
                android:layout_below="@+id/button_menu"/>
    </RelativeLayout>
</android.support.v7.widget.Toolbar>

答案 1 :(得分:4)

将工具栏包装在AppBarLayout(扩展LinearLayout)中并将该行添加为视图:

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    ...>

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        .../>

    <View android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="..."
          />

</android.support.design.widget.AppBarLayout>

使用AppBarLayout,在Android 21及更高版本上会有一个默认的“关键线”,我不得不在代码中将其关闭:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    findViewById (R.id.app_bar).setOutlineProvider (null);
}

答案 2 :(得分:0)

还有另一种解决方案,通过绘制到画布上

class CustomToolbar(context: Context?, attrs: AttributeSet?) : Toolbar(context, attrs) {

    private val lineColor: Int = Color.rgb(0, 0, 0)

    init {
        invalidate()
    }

    override fun dispatchDraw(canvas: Canvas?) {
        val paint = Paint()
        paint.color = lineColor
        paint.strokeWidth = 15f
        canvas?.drawLine(0f, height.toFloat(), width.toFloat(), height.toFloat(), paint)
        super.dispatchDraw(canvas)
    }
}