1

我正在爲我的應用程序創建一個撰寫屏幕。我有一個ScrollView,其中包含一個RelativeView,其中包含兩件事:用戶輸入消息的EditText以及根據圖像是否附加到狀態來打開和關閉其可見性的ImageView。這是我的佈局XML的一部分。如何從RelativeLayout調用onClick和onLongClick EditText

<!-- @dimen/bigGap = 8dp --> 
<ScrollView android:id="@+id/parentScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    android:layout_marginTop="@dimen/bigGap" 
    android:layout_marginRight="@dimen/bigGap" 
    android:layout_marginLeft="@dimen/bigGap" 
    android:layout_marginBottom="@dimen/bigGap" 
    android:layout_above="@+id/footer" 
    android:background="#006400" 
    > <!-- green background color --> 

    <RelativeLayout android:id="@+id/parentLinearLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFD700"> <!-- yellow background color --> 

     <EditText android:id="@+id/postText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#dddddd" 
      android:inputType="textMultiLine" 
      android:gravity="top|left" 
      /> <!-- gray background color --> 

     <ImageView android:id="@+id/postImage" 
      android:layout_width="@dimen/thumbnailSize" 
      android:layout_height="@dimen/thumbnailSize" 
      android:visibility="gone" 
      android:layout_below="@id/postText" 
      /> 
    </RelativeLayout> 
</ScrollView> 

因爲我EditText的高度wrap_content,整個事情開始了與灰色的背景上的黃色背景(RelativeLayout,其完全覆蓋的綠色背景上的單一線(EditTextScrollView)。不過,我稍後會將所有視圖的背景更改爲白色(以使它們看起來像是單個組件),並且與用戶只能點擊唯一一行EditText以使鍵盤彈出向上。

enter image description here

我想要做的是重定向RelativeLayoutEditText的點擊和長按操作的點擊和長按的動作,但我下面的代碼不能正常工作。幫幫我?

final EditText editText = (EditText) findViewById(R.id.postText); 
RelativeLayout rl = (RelativeLayout) findViewById(R.id.parentLinearLayout); 
rl.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Logger.d("onClick invoked!"); 
     editText.performClick(); 
    } 
}); 
rl.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     Logger.d("onLongClick invoked!"); 
     return editText.performLongClick(); 
    } 
}); 

我在這裏的目的是使被點擊的RelativeLayout時,鍵盤彈出,當長按,顯示剪切/複製/粘貼/文本選擇選項(如當做一個EditText它) (與EditText相同的行爲)。

回答

1

從描述中,您實際需要的是打開鍵盤。所以你對這個問題的標題提出了一個解決方案,而不是實際的問題。

調用這個從點擊監聽器(或立即當你顯示網頁):

((InputMethodManager) myActivity 
      .getSystemService(Context.INPUT_METHOD_SERVICE)) 
      .toggleSoftInput(InputMethodManager.SHOW_FORCED, 
        InputMethodManager.HIDE_IMPLICIT_ONLY); 

編輯: 你還必須調用editText.requestFocus();(@Phil是正確的),但根據我的經驗,打開鍵盤還不夠,所以您還需要上面的醜陋代碼。

0

你需要的是你的EditText獲得焦點(後者又導致鍵盤顯示):

rl.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Logger.d("onClick invoked!"); 
     editText.requestFocus(); 
    } 
}); 
rl.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     Logger.d("onLongClick invoked!"); 
     editText.requestFocus(); 
     return true; 
    } 
});