2017-10-29 27 views
1

用戶報告我們的應用程序佈局的特定區域停止響應點擊(未點擊按鈕點擊)。什麼可能導致Android佈局的特定區域停止響應按鈕點擊?

我們有幾個鍵盤佈局可以換入和換出。下面是我們如何做到這一點:

keypad1.setVisibility(RelativeLayout.GONE); 
keypad2.setVisibility(RelativeLayout.VISIBLE); 
keypad2.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
int newDimension = (int) (keypad2.getMeasuredHeight() + getResources().getDimension(R.dimen.keypad_toggle_button_height)); 

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) keypadContainer.getLayoutParams(); 
layoutParams.height = newDimension; 
keypadContainer.setLayoutParams(layoutParams); 

父佈局android:animateLayoutChanges="true"所以這種佈局變化平滑的動態。

用戶可以訪問全部按鈕keypad1。當keypad2加載到視圖中時,用戶可以點擊大多數的按鈕,但底部的按鈕除外。因爲keypad2稍高keypad1,我傾向於認爲可能會發生此問題,因爲佈局調整大小後未正確更新,並且未收到觸摸事件。

不用說,這對我們和我們的大部分用戶來說都是完美的,我們還沒有能夠在我們擁有的任何模擬器或設備上重現問題。受影響的系統是運行Lollipop(Android 22)的三星Galaxy S5。我們已收到來自用戶的應用截圖,它看起來與我們期望的屏幕大小和分辨率完全相同。

我們做錯了什麼?我們如何解決它?

謝謝!

編輯:這裏是相關的佈局XML片段。

  <LinearLayout 
      android:id="@+id/keypad_container" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/keypad_toggle_button_height" 
      android:layout_alignParentBottom="true" 
      android:gravity="top" 
      android:orientation="vertical"> 

      <View 
       android:id="@+id/toggle_button" 
       android:layout_width="match_parent" 
       android:layout_height="@dimen/keypad_toggle_button_height" 
       android:background="@drawable/toggle" 
       android:clickable="true" 
       android:onClick="toggleKeyboard" 
       /> 

      <com.app.views.KeyboardViewA 
       android:id="@+id/keypad_1" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@android:color/transparent"> 
      </com.app.views.KeyboardViewA> 

      <com.app.views.KeyboardViewB 
       android:id="@+id/keypad_2" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:visibility="gone"> 
      </com.app.views.KeyboardViewB> 
     </LinearLayout> 
+0

這些鍵盤是否包裹到其他一些佈局中?您隱藏了實際的鍵盤,但包裝佈局可能仍然在新的鍵盤之上。 – mihail

+0

謝謝@mihail,我已將XML佈局添加到上述問題中。小鍵盤是同一父容器中的所有同級視圖。 – eli

+0

可能是一個佈局是在另一個之上,你可以嘗試使用給佈局的寬度和高度,以避免重疊? – Vishwa

回答

1

沒有能夠重現問題,我不能確信以下任何幫助,但這裏是我的建議:

變化如何measure()被稱爲:要調用measure()這樣的:

keypad2.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

這轉化爲keypad2.measure(-1, -2)measure()被定義爲(從documentation):

措施

無效措施(INT widthMeasureSpec, INT heightMeasureSpec)

這就是所謂找出一個觀點應該多大。父級在寬度和高度參數中提供約束信息。

所以,你的設置和來電measure()應該是這個樣子:

int layoutWidth = ((LinearLayout) (keypad2.getParent())).getWidth(); 
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(layoutWidth, View.MeasureSpec.EXACTLY); 
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 
keypad2.measure(widthMeasureSpec, heightMeasureSpec); 

我不知道你所擁有的方式究竟發生了什麼,但是,因爲它工作的大部分時間裏,它可能是好的,或者它可能只是在某些情況下困擾着你。

我想到的另一件事情是您可能想要嘗試的,那就是在您要顯示的小鍵盤上調用forceLayout()以確保其正確佈置。

+0

感謝您的指示。我們已經部署了一個新版本,並希望能夠確認它已經解決了這種情況。由於賞金時間已到,這似乎是唯一的實質性建議,我會將這些觀點發給你。我會立即發佈更新,只要我知道它是否有效。 – eli

+0

不幸的是,這並沒有解決問題。無論如何感謝您的嘗試! – eli