LinearLayout を拡張し、onTouchListener を実装するカスタム コンポーネントがあります。
このコンポーネントは、onTouch の起動時にグラフィックに変更を加え、カスタム ビューの leftMargin 属性を変更します。
onTouch メソッドをオーバーライドせずにコンポーネントをプロジェクトに追加すると、すべてが機能しているように見えますが、onTouch メソッドをオーバーライドすると、左マージンの状態が画面の幅に対して相対的になります。
なぜそうなのですか?
カスタム コンポーネント:
@Override
public void setOnTouchListener(OnTouchListener l) {
super.setOnTouchListener(l);
navigationButton.setonTouchListener(l)
}
@Override
public boolean onTouch(View view, MotionEvent event) {
.....
return true;
}
アクティビティ:
CustomComponent customComponent = (CustomComponent)findViewById(R.id.custom_component);
customComponent.setOnTouchListener(new OnTouchListener(..... // This part leads to the change in leftMargin of the customComponent
編集: コードを少し編集しました: 前:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="64.67dp"
android:gravity="right|center_vertical" >
<com.est.bla.bla.customcomponents.SomeCustomComponent
android:id="@+id/someid"
android:gravity="center"
android:layout_marginRight="6dip"
android:layout_width="100dip"
android:layout_height="50dip" >
</com.est.bla.bla.customcomponents.SomeCustomComponent>
今:(今では正しく動作します)
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="64.67dp"
android:layout_alignParentRight="true"
android:gravity="center_vertical" >
<com.est.bla.bla.customcomponents.SomeCustomComponent
android:id="@+id/someid"
android:gravity="center"
android:layout_marginRight="6dip"
android:layout_width="100dip"
android:layout_height="50dip" >
</com.est.bla.bla.customcomponents.SomeCustomComponent>
layout_alignParentRight="true"
したがって、この特定のケースでは、よりも優れ ていると思いますgravity="right"