タイトルは私の問題をかなり明確に示していると思います...だから、これが私のレイアウトです:
_ <RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<Button
Android:id="@+id/button_action"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Login" />
<ProgressBar
Android:id="@+id/progress_bar"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:layout_centerInParent="true"/>
</RelativeLayout>
_
Android SDKs <21、問題ありません、ProgressBarはボタンの上に正しく表示され、ボタンの中央に配置されます。しかしAndroid 5.0では、ProgressBarが表示されます背後ボタン。
そのため、[開発者向けオプション]設定で[レイアウトの境界を表示]オプションをアクティブにすると、正しく配置されていることがわかりますが、そのオプションがないと画面には何も表示されません。
誰かがこれを修正する方法を知っていますか?最近導入されたelevationの問題だと思いますが、どうすればいいのかわかりません。参考までに、最近リリースされたsupport.v7のTheme.AppCompatスタイルを使用しています。
編集:
プログラムでsetElevation(0)
とsetTranslationY(0)
をボタンに適用しようとしましたが、何も変更されませんでした。標高に対応する必要があるのでしょうか。
みんなありがとう
マシュー
ProgressBarでAndroid:translationZ属性を使用できます。
<ProgressBar
Android:id="@+id/progress_bar"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:translationZ="2dp"
Android:layout_centerInParent="true"/>
ここで同じ問題、私の単純な「ハック」は、ボタンを別のFrameLayoutにラップしすぎていました。この方法では、APIバージョンやその他の昇格の問題は気にしません;)
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center" >
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<Button
Android:id="@+id/button_action"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Login" />
</FrameLayout>
<ProgressBar
Android:id="@+id/progress_bar"
Android:layout_width="50dp"
Android:layout_height="50dp" />
</FrameLayout>
同じ質問がここで行われ、問題のより良い説明が付いています:
https://stackoverflow.com/a/27216368/23591
@CommonsWareを引用するには:
問題が表示されますAndroid 5.0の
elevation
プロパティ。どうやら、RelativeLayout
Z軸の順序はelevation
に関連付けられています。両方のウィジェットがelevation
が同じ場合、RelativeLayout
がZ軸の順序を決定します。たとえば、レイアウトを両方のButton
ウィジェットに切り替えると、次のようになります。ただし、1つのウィジェット(Button
)にelevation
があり、別のウィジェット(ImageView
)にない場合は、elevation
が優先されます。
Button
elevation
は、Android:stateListAnimator="@null"
または 独自のカスタムアニメーターを定義する によって削除できます。または、いくつかのelevation
をImageView
に追加して、Button
よりもZ軸上で高くすることができます。
Build.gradleに「androidx.core:core」を追加すると、API <21にこのコードを使用できます。
ViewCompat.setTranslationZ(viewToElevate, 5);
Android:translationZを2 dp以上に設定することをお勧めします。ボタンを押すと、ビュー/ウィジェットが消えます。理由を説明しました ここ 。
<!-- Elevation when button is pressed -->
<dimen name="button_elevation_material">1dp</dimen>
<!-- Z translation to apply when button is pressed -->
<dimen name="button_pressed_z_material">2dp</dimen>
ボタンにはこれら2つの値があり、 フレームワーク で定義されています。