เมื่อใช้AppBarLayout
วิดเจ็ตในไลบรารีสนับสนุนการออกแบบเงาจะปรากฏที่ด้านล่างของแถบเครื่องมือ ฉันจะลบเงานั้นได้อย่างไร?
เมื่อใช้AppBarLayout
วิดเจ็ตในไลบรารีสนับสนุนการออกแบบเงาจะปรากฏที่ด้านล่างของแถบเครื่องมือ ฉันจะลบเงานั้นได้อย่างไร?
คำตอบ:
เพียงใช้app:elevation="0dp"
ภายใน "AppBarLayout" เพื่อลบเงา มันได้ผลสำหรับฉันเสมอ หวังว่ามันจะเหมาะกับคุณ
setOutlineProvider
ปัญหานี้เกิดขึ้นเฉพาะเมื่อเวอร์ชัน api> = 21หากคุณไม่ต้องการเปลี่ยนระดับความสูงคุณสามารถใช้:
appBar.setOutlineProvider(null);
อย่าลืมตรวจสอบเวอร์ชัน api
แก้ไข:
Blow เป็นซอร์สโค้ดของsetOutlineProvider
.
/**
* Sets the {@link ViewOutlineProvider} of the view, which generates the Outline that defines
* the shape of the shadow it casts, and enables outline clipping.
* <p>
* The default ViewOutlineProvider, {@link ViewOutlineProvider#BACKGROUND}, queries the Outline
* from the View's background drawable, via {@link Drawable#getOutline(Outline)}. Changing the
* outline provider with this method allows this behavior to be overridden.
* <p>
* If the ViewOutlineProvider is null, if querying it for an outline returns false,
* or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
* <p>
* Only outlines that return true from {@link Outline#canClip()} may be used for clipping.
*
* @see #setClipToOutline(boolean)
* @see #getClipToOutline()
* @see #getOutlineProvider()
*/
public void setOutlineProvider(ViewOutlineProvider provider) {
mOutlineProvider = provider;
invalidateOutline();
}
ว่ากันว่า If the ViewOutlineProvider is null, if querying it for an outline returns false, or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
ดังนั้นถ้าคุณต้องการที่จะลบเงาคุณควรที่จะใช้วิธีนี้แทนการตั้งค่า app:elevation
ดูเหมือนว่าการเปลี่ยนระดับความสูงเพื่อลบเงาเป็นผลข้างเคียงชนิดหนึ่ง และการเปลี่ยนระดับความสูงอาจทำให้เกิดปัญหาอื่น ๆ ในบางกรณี
สำหรับผู้ที่ไม่ต้องการใช้งานbringToFront()
และelevation="0dp"
ทำให้แถบเครื่องมือหายไป:
app:elevation="0dp"
โดยผสมผสานระหว่างที่มีการandroid:translationZ="0.1dp"
ทำงานสำหรับฉัน
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp"
android:translationZ="0.1dp"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@null"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
ด้วย appcompat เวอร์ชันล่าสุดการตั้งค่าเคล็ดลับapp:elevation="0.1dp"
ใน xml จะไม่ทำงานอีกต่อไป
จนถึงตอนนี้ฉันพบวิธีแก้ปัญหาสองวิธี
แทนที่จะตั้งค่าapp:elevation
ให้ลองใช้ stateListAnimator ตัวอย่างเช่นในรหัส:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
StateListAnimator stateListAnimator = new StateListAnimator();
stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(appBarLayout, "elevation", 0.1f));
appBarLayout.setStateListAnimator(stateListAnimator);
}
วิธีที่ง่ายกว่าคือคุณยังคงตั้งค่าapp:elevation="0dp"
เป็น xml ตามปกติ แต่ในโค้ด:
appBarLayout.bringToFront();
เครดิตไปที่การสนทนาทั้งสองนี้:
ToolBar จะหายไปเมื่อตั้งค่าระดับความสูงสำหรับ AppBarLayout
เมื่อตั้งค่าแอป: ความสูง = "0dp" แล้วแฮมเบอร์เกอร์เมนูไม่แสดงในแถบเครื่องมือ
ใช้android:stateListAnimator="@null"
. ไม่มีผลข้างเคียง.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:stateListAnimator="@null"
>
ฉันลองแล้วapp:elevation="0dp"
แต่แถบเครื่องมือไม่ปรากฏขึ้น แต่ใช้app:elevation="0.1dp"
ทำให้เคล็ดลับ
หวังว่านี่จะช่วยคนอื่นได้
v25.0.0
.
เพิ่มแอป: ระดับความสูง = "0dp" บน AppBarLayout ของคุณ เช่นตัวอย่างนี้
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
โดยทางโปรแกรมคุณสามารถใช้สิ่งนี้: getSupportActionBar (). setElevation (0.0f);
นี่คือวิธีที่ฉันคิดขึ้นapp:elevation="0dp"
เพื่อลบเงาใช้งานได้อย่างสมบูรณ์แบบ