在我的应用程序中,设备软键盘覆盖了EditTextViews,因此用户无法看到他正在输入的内容。
所以我想隐藏其他视图(就像我的情况下的一个按钮),以使EditTextViews可见。
但是做了类似
的事情EditText.onFocus(){
//hide button
}
对于每个EditText,我想做类似
的事情if(soft-keyboard.isOpenned())
//hide button
}
如何打开或关闭软键盘?
修改
其实我的布局是这样的:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/transparent"
android:focusable="true"
android:focusableInTouchMode="true" >
</LinearLayout>
<ImageView
android:id="@+id/Logo"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/wic_logo_small" />
<Button
android:id="@+id/goButton_iWant"
android:layout_width="35dp"
android:layout_height="45dp"
android:layout_alignParentRight="true"
android:background="@color/black"
android:gravity="center_vertical|center_horizontal"
android:text="@string/go" />
<AutoCompleteTextView
android:id="@+id/searchAutoCompleteTextView_iWant"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/goButton_iWant"
android:layout_toRightOf="@id/Logo"
android:hint="@string/search"
android:textColor="@color/white" />
<TextView
android:id="@+id/iWantLabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iWantPageLogo"
android:background="@color/grey"
android:gravity="center_vertical|center_horizontal"
android:text="@string/iWant"
android:textColor="@color/white" />
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollViewiWant"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/iWantLabel"
android:scrollbars="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/iNeedToBuy"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iWantLabel"
android:gravity="center_vertical|center_horizontal"
android:padding="5dp"
android:text="@string/iNeedToBuy"
android:textColor="@color/white"
android:textSize="20dp" />
<AutoCompleteTextView
android:id="@+id/iNeedToBuyEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iNeedToBuy"
android:hint="@string/product"
android:imeOptions="actionNext"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="15dp" />
<TextView
android:id="@+id/error1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iNeedToBuyEditText"
android:height="0dp"
android:text=""
android:textColor="@color/error_color"
android:textSize="12dp" />
<TextView
android:id="@+id/priceWillingToPay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/error1"
android:gravity="center_vertical|center_horizontal"
android:text="@string/priceWillingToPay"
android:textColor="@color/white"
android:textSize="20dp" />
<EditText
android:id="@+id/priceWillingToPayEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/priceWillingToPay"
android:hint="@string/price"
android:inputType="number"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="15dp" />
<TextView
android:id="@+id/error2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/priceWillingToPayEditText"
android:height="0dp"
android:text=""
android:textColor="@color/error_color"
android:textSize="12dp" />
<TextView
android:id="@+id/needToBuyItBy"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/error2"
android:gravity="center_vertical|center_horizontal"
android:text="@string/needToBuyItBy"
android:textColor="@color/white"
android:textSize="20dp" />
<EditText
android:id="@+id/date_iWant"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/needToBuyItBy"
android:clickable="true"
android:cursorVisible="false"
android:focusable="false"
android:hint="@string/date"
android:inputType="none"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="15dp" />
<TextView
android:id="@+id/error3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/date_iWant"
android:height="0dp"
android:text=""
android:textColor="@color/error_color"
android:textSize="12dp" />
<DatePicker
android:id="@+id/datePicker_iWant"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_below="@id/error3"
android:hint="@string/date"
android:padding="5dp"
android:textColor="@color/black"
android:textSize="15dp" />
<TextView
android:id="@+id/iAmIn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/date_iWant"
android:gravity="center_vertical|center_horizontal"
android:text="@string/iAmIn"
android:textColor="@color/white"
android:textSize="20dp" />
<Spinner
android:id="@+id/city_spinner_iWant"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/iAmIn"
android:prompt="@string/citySpinner"
android:textColor="@color/white"
android:textSize="20dp" />
<Button
android:id="@+id/submitButton_iWant"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/city_spinner_iWant"
android:gravity="center_vertical|center_horizontal"
android:text="@string/submit"
android:textColor="@color/white"
android:textSize="20dp" />
<TextView
android:id="@+id/emptySpace"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_below="@id/submitButton_iWant"
android:gravity="left" />
</RelativeLayout>
</ScrollView>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/buttons_iWant"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/feedButton_iWant"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/feed"
android:textColor="@color/black" />
<Button
android:id="@+id/iWantButton_iWant"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/iwant"
android:textColor="@color/black" />
<Button
android:id="@+id/shareButton_iWant"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/share"
android:textColor="@color/black" />
<Button
android:id="@+id/profileButton_iWant"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/profile"
android:textColor="@color/black" />
</LinearLayout>
</RelativeLayout>
当我在EditTextViews
ScrollView
中输入文字时出现问题
答案 0 :(得分:5)
没有直接的方法可以找到它,但我提出了一个肮脏的解决方案,它工作正常。背后的想法是比较你的活动和键盘的两个视图的高度。
boolean watcherState;
private void isShowing() {
final RelativeLayout relative = (RelativeLayout) findViewById(R.id.parent);
relative.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
// r will be populated with the coordinates of your view
// that area still visible.
relative.getWindowVisibleDisplayFrame(r);
int heightDiff = relative.getRootView().getHeight()
- (r.bottom - r.top);
Log.d("Height", heightDiff + "//");
if (heightDiff > 100) { // if more than 100 pixels, its
// probably a keyboard...
watcherState = true;
} else
watcherState = false;
}
});
}
答案 1 :(得分:0)
您应该在清单文件中使用android:windowSoftInputMode
属性来描述软键盘显示时屏幕布局应如何排列(http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft)
android:windowSoftInputMode="adjustResize"
:活动的主窗口始终调整大小以便为软件腾出空间 键盘在屏幕上。
android:windowSoftInputMode="adjustPan"
活动的主窗口未调整大小以便为软键盘腾出空间。相反,窗口的内容会自动平移,以便键盘不会遮挡当前焦点,用户可以随时看到他们正在键入的内容。这通常不如调整大小,因为用户可能需要关闭软键盘才能进入并与窗口的模糊部分进行交互。
答案 2 :(得分:0)
要处理软键盘检测,请在android:ConfigChanges
文件中为您的活动设置AndroidManifest.xml
属性:
<activity android:name="com.myapp.MyActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
此处,keyboard|keyboardHidden
中的android:configChanges
标志告诉系统,Activity希望调用Activity的onConfigurationChanged()
方法,这样您就可以处理softkebaord更改。
以下是一个示例onConfigurationChanged()
,它替换了当前正在运行的Activity的主要内容视图:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Set a new layout - framework will automatically choose portrait or landscape as needed
setContentView( R.layout.my_activity_layout );
// Reconnect all listeners for controls in the layout
a.findViewById( R.id.exit_button ).setOnClickListener( mListener );
}
可能的情况是,您的onConfigurationChanged()
方法需要完成与Activity的onCreate()
方法完全相同的工作,因此通过分解布局来干掉代码可能是个好主意设置为您从onCreate()
和onConfigurationChanged()
调用的单独辅助方法。