私は、TabViewの3つのタブのうちの1つであるフラグメント内にRelativeLayoutを持っています。これを参照してくださいスクリーンショット - 大きなピンクの広場は私のRelativeLayoutです screenshotプログラムでRelativeLayout内のビューに余白を設定すると、この奇妙な動作を説明するにはどうすればよいですか?
右下隅に小さな青い正方形が表示されます。 RelativeLayoutは300x300dpで、小さな正方形は8x8dpなので、上端と左端を292dpに設定すると、その角に終わります。 これでプログラムの位置を変更したいと思いますが、私の場合は値を2で割っていきます。したがって、292から292にマージンを変更すると、RelativeLayoutの中心になりますが、それぞれを292 * 2に設定すると、コーナーに戻ります。 ここに何が起こっているかを知っている人がいるでしょうか?
これは私のレイアウトファイルです:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="40dp"
android:height="40dp"
android:background="@color/colorAccent"
android:text="Test!" />
<RelativeLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:background="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<View
android:id="@+id/position_dot"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@color/colorPrimary"
android:layout_marginLeft="292dp"
android:layout_marginTop="292dp"/>
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
</layout>
、これは私が余裕を更新するために使用する方法である:
fun moveDotToCurrentPosition() {
var params = positionDot.layoutParams as RelativeLayout.LayoutParams
params.topMargin = 292
params.leftMargin = 292
positionDot.layoutParams = params
}
コードを短くして、関連するものに限定しようとしました。何か重要なものが見つからない場合は、私に連絡してください。 私はKotlinにこれを書いていますが、Javaの回答も役に立ちます。 ありがとうございます。
それはトリックです - ありがとう!しかしもう1つの質問:これは、プログラムで値を変更すると、常にピクセル単位で値が転送されるため、変換する必要がある場合や、dpを使用することが可能なので、デバイスに翻訳? – michpohl
(XMLとは対照的に)コード内の次元値を使って作業しているときは、現在の 'DisplayMetrics'に基づいて' px'から 'dp'への変換を行うか、 'getDimensionPixelSize()'を使用します。 1つのしわは、 'TextView'の' setTextSize(int、float) 'メソッドのような)いくつかの場所があり、使用する"単位 "を指定できます。この場合、' TypedValue.COMPLEX_UNIT_DIP'を渡して'dp'値を使います。 –
私は参照してください。ありがとうございました! – michpohl