我有一个Linearlayouts,一个ScrollView和一个按钮,我无法弄清楚为什么当我以编程方式将一个Checkbox添加到Linearlayout时,在视图的末尾,来自scrollview的方法
scrollview.scrollto(0, ScrollView.FOCUS_DOWN);
不会关注最后添加的项目。
这里是XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="100"
tools:context="com.eidotab.myapplication.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:padding="10dp"
android:layout_weight="30">
<ScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/linear"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
</LinearLayout>
<Button
android:id="@+id/boton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="TEST"/>
</LinearLayout>
这里是java:
public class MainActivity extends AppCompatActivity {
ScrollView scrollView;
LinearLayout linearLayout;
Button button;
int num = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scrollView = (ScrollView) findViewById(R.id.scroll);
linearLayout = (LinearLayout) findViewById(R.id.linear);
button = (Button) findViewById(R.id.boton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num++;
CheckBox checkBox = new CheckBox(getApplicationContext());
checkBox.setText("TEST " + num);
checkBox.setTextColor(Color.BLACK);
linearLayout.addView(checkBox);
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
}
}
我也添加了.rar,所以你只需要下载并尝试它..我花了几个小时试图让它工作..也尝试从LinearLayout获取具体的孩子
y = Linearlayout.getchildat(N).getBottom();
和FOCUS_DOWN类似......我永远看不到最后一个项目..只有最后一个项目。
提前感谢您的帮助。
这是程序
https://www.dropbox.com/home/Public?preview=MyApplication.rar
答案 0 :(得分:0)
经过一些研究后,在尝试以编程方式执行滚动时似乎存在某种问题,我发现最好的解决方案是在我的代码中在onClick方法中添加一个runable,所以我添加了
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
,最终结果是
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
num++;
CheckBox checkBox = new CheckBox(getApplicationContext());
checkBox.setText("TEST " + num);
checkBox.setTextColor(Color.BLACK);
linearLayout.addView(checkBox);
//scrollView.fullScroll(ScrollView.FOCUS_DOWN);
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
}
});
它现在正在完美地工作,但是说,我不认为这是理想的解决方案。