设置视图的位置

时间:2016-07-10 00:14:04

标签: android button textview android-dialogfragment

这里简化了我的设置: 我有一个片段,我有一个按钮。我想要做的是向用户显示该按钮的功能。我希望这个解释看起来像这样:除了按钮变暗之外的所有视图,按钮旁边有一个TextView,表示"嘿,这是一个按钮!"。

我在做什么: 1)我创建了一个DialogFragment,它复制了该按钮并在其附近有一个TextView。布局看起来像这样:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
                android:id="@+id/tutorial_fragment_element"
                android:layout_width="14dp"
                android:layout_height="16dp"
                android:layout_marginLeft="1dp"
                android:text="Button"/>

        <TextView
                android:id="@+id/tutorial_fragment_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="16sp"
                android:text="The button!"/>

    </LinearLayout>

</LinearLayout>

因此,tutorial_fragment_element是我应该分配与原始按钮相同位置的元素。

这里是教程幻灯片DialogFrament的代码:

public class TutorialScreen extends DialogFragment {
    /**
     * View
     */
    @BindView(R.id.tutorial_fragment_element) LinearLayout mTutorialElement;

    /**
     * Constructor
     */
    public TutorialScreen3() {

    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tutorial_fragment, container, false);

        ButterKnife.bind(this, view);

        return view;
    }

    @Override
    protected void updateTargetPosition() {
        int x = getTargetX();
        int y = getTargetY();

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);


        layoutParams.setMargins(x,y,0,0);

        mTutorialElement.setLayoutParams(layoutParams);

    }
}

实际上,它继承自我的自定义DialogFragment,其中我设置了所有必要的东西,因为有很多教程屏幕。它在这里并不重要,但实际上我如何得到原始按钮的位置(不是在DialogFragment上,而是在Fragment本身上):

protected void setDialogPosition() {
    if (mTargetView == null) {
        return; // Leave the dialog in default position
    }

    Rect rect = new Rect() ;
    mTargetView.getGlobalVisibleRect(rect);

    int sourceX = rect.centerX()-(rect.width()/2)+mTargetView.getLeft()-2;
    int sourceY = rect.centerY()-(rect.height()/2+mTargetView.getBottom())-18;

    mTargetX = sourceX;
    mTargetY = sourceY;

    updateTargetPosition();
}

这就是交易:DialogFragment上按钮的位置总是与原始Fragment按钮的位置不同。

我的问题是:如何获得元素的绝对位置并将其传递到元素的位置到DialogFragment上,如上所示?

0 个答案:

没有答案