【问题标题】:Scrollview disappers when clicking Checkbox单击复选框时滚动视图消失
【发布时间】: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


    【解决方案1】:
    ScrollView view = (ScrollView)findViewById(R.id.scrollView);
    view.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
    view.setFocusable(true);
    view.setFocusableInTouchMode(true);
    view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            v.requestFocusFromTouch();
            return false;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多