0

我的問題是,當我點擊我的Checkboxthe 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仍然會消失。在Emulator(API 16)中一切都很好用。接下來的事情是,我的手機上的位置不正確(API 19),但在Emulator中位置正確。

爲了說明這裏有幾個圖片:

(1):按壓複選框(移動電話)之前 before pressing checkbox (mobile phone)

(2):按壓複選框(移動電話)後 - >無ScrollView了,錯誤的位置 after pressing checkbox (mobile phone)

(3):按複選框(模擬器)之後 - >一切都好 after pressing checkbox (emulator)

讓我知道,當你需要更多的java/xml

回答

0
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; 
    } 
});