【发布时间】:2014-10-06 17:13:21
【问题描述】:
我的问题是,当我单击复选框时,ScrollView 消失了。该复选框使用OnCheckChangedListener
这是我的布局文件的一部分:
<ScrollView
android:id="@+id/drawingScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:paddingTop="300dp" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp" >
<ImageButton
android:id="@+id/eraseButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/rubber" />
<CheckBox
android:id="@+id/unschaerfeFilterCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Unschärfefilter AN/AUS"
android:textSize="12sp" />
<ImageButton
android:id="@+id/undoButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/undo" />
</FrameLayout>
</ScrollView>
当我选中和取消选中复选框时,布局应该改变:
unschaerfeFilterCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// ab 6.2. Zeile
CheckBox unschaerfeFilterCheckBox = (CheckBox) findViewById(R.id.unschaerfeFilterCheckBox);
TextView radiusTextView = (TextView) findViewById(R.id.radiusTextView);
TextView radiusTextMin = (TextView) findViewById(R.id.radiusMinTextView);
SeekBar unschaerfeSeekBar = (SeekBar) findViewById(R.id.unschaerfeSeekbar);
RadioButton unschaerfeCheckBox1 = (RadioButton) findViewById(R.id.unschaerfeCheckBox1);
RadioButton unschaerfeCheckBox2 = (RadioButton) findViewById(R.id.unschaerfeCheckBox2);
RadioButton unschaerfeCheckBox3 = (RadioButton) findViewById(R.id.unschaerfeCheckBox3);
RadioButton unschaerfeCheckBox4 = (RadioButton) findViewById(R.id.unschaerfeCheckBox4);
ScrollView drawingScrollView = (ScrollView)findViewById(R.id.drawingScrollView);
View view = (View)findViewById(R.id.vorschauView);
if (isChecked) {
drawingScrollView.invalidate();
drawingScrollView.requestLayout();
view.invalidate();
view.requestLayout();
radiusTextView.setVisibility(View.VISIBLE);
radiusTextMin.setVisibility(View.VISIBLE);
unschaerfeSeekBar.setVisibility(View.VISIBLE);
unschaerfeCheckBox1.setVisibility(View.VISIBLE);
unschaerfeCheckBox2.setVisibility(View.VISIBLE);
unschaerfeCheckBox3.setVisibility(View.VISIBLE);
unschaerfeCheckBox4.setVisibility(View.VISIBLE);
unschaerfeWertIsSet = true;
unschaerfeLayoutIsSet = true;
short abstandDurchsichtigkeitsTextOben = (short)(abstandStrichDickeTextOben + strichdickeTextHeight + konstanterAbstand);
short height = (short)(drawingScrollView.getPaddingTop());
short abstandUnschaerfeCheckBoxOben = (short)(abstandDurchsichtigkeitsTextOben + durchsichtigkeitsTextHeight + konstanterAbstand /*+ height*/);
Log.d("abstandUnschaerfeCheckBoxOben", "abstandUnschaerfeCheckBoxOben " + abstandDurchsichtigkeitsTextOben + "|" + abstandUnschaerfeCheckBoxOben + "|" + height); // 64 bei Galaxy s2
unschaerfeCheckBoxLayout.setMargins(0, abstandUnschaerfeCheckBoxOben, 0, 0);
unschaerfeFilterCheckBox.setLayoutParams(unschaerfeCheckBoxLayout);
short abstandRadiusTextLinks = (short)(unschaerfeCheckBoxWidth + konstanterAbstand);
short abstandRadiusTextOben = (short)(abstandUnschaerfeCheckBoxOben + konstanterAbstand / 2);
radiusTextViewLayout.setMargins(abstandRadiusTextLinks, abstandRadiusTextOben, 0, 0);
radiusTextView.setLayoutParams(radiusTextViewLayout);
short abstandRadiusMinTextLinks = (short)(abstandRadiusTextLinks + radiusTextViewWidth + konstanterAbstand);
radiusMinTextViewLayout.setMargins(abstandRadiusMinTextLinks, abstandRadiusTextOben, 0, 0);
radiusTextMin.setLayoutParams(radiusMinTextViewLayout);
...
即使我取消选中复选框,ScrollView 仍然消失。在模拟器(API 16)中一切都很好。接下来是,我的手机(API 19)上的位置不正确,但在模拟器中,位置是正确的。
这里有几张图片作为说明:
(1):在按下复选框之前(手机)
(2): 按下复选框后(手机)-> 不再有ScrollView,位置错误
(3): 按下复选框后(模拟器)-> 一切正常
当你需要更多 java / xml 时告诉我
【问题讨论】:
标签: android android-layout checkbox android-emulator scrollview