Android C#在ScrollView中的TopMost上设置OnClick布局位置

时间:2017-03-19 09:34:25

标签: c# android xamarin

我有一个像ScorrView一样的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ScrollView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView1">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:Text="Text1"
                android:id="@+id/Text1" />
            <TextView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:Text="Text1"
                android:layout_below="@+id/Text1"
                android:id="@+id/Text2" />
            <TextView
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:Text="Text1"
                android:layout_below="@+id/Text2"
                android:id="@+id/Text3" />         
        </RelativeLayout>
    </ScrollView>
</LinearLayout>

现在我想制作如果单击Text2然后ScrollView在屏幕的TopMost上有位置Text2,那么如果我单击Text3它将使ScrollView在顶部有Text3。它有可能吗?如何?

default
//x
Text1
Text2
Text3
//z

OnClick Text2
Text1 hidden, visible if scroll
//x
Text2
Text3
//z

即时尝试添加RequestFocus()并且无法正常工作,TextView2.ScrollTo(0,0)也只将Scroll位置移动到0而不关注TextView2

1 个答案:

答案 0 :(得分:0)

您可以将ScrollView滚动到后面代码中的特定位置,对于您的场景,您可以使用例如以下代码:

public ScrollView scview;

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    // Create your application here
    SetContentView(Resource.Layout.layout1);

    scview = FindViewById<ScrollView>(Resource.Id.scrollView1);

    TextView tv1 = FindViewById<TextView>(Resource.Id.Text1);
    TextView tv2 = FindViewById<TextView>(Resource.Id.Text2);
    TextView tv3 = FindViewById<TextView>(Resource.Id.Text3);

    tv1.Click += Tv_Click;
    tv2.Click += Tv_Click;
    tv3.Click += Tv_Click;
}

private void Tv_Click(object sender, EventArgs e)
{
    var tv = sender as TextView;
    var yoffset = tv.Top;
    scview.ScrollTo(0, yoffset);
}

但要明确的是,ScrollView只能在其内容大于实际展示时滚动,因此对于您的情况,如果您的滚动高度为match_parent而您只有三个{ {1}},然后无法滚动。如果我在这里将高度更改为100dp,点击TextView会使Text2滚动到它,但如果我点击ScrollView,则Text3将不会滚动因为它已经到达结尾,最上面的项目仍然是ScrollView,这是设计的。