Если вы хотите обрабатывать отображение / скрытие окна IMM (виртуальной) клавиатуры из своего Activity, вам нужно создать подкласс вашего макета и переопределить метод onMesure (чтобы вы могли определить измеренную ширину и измеренную высоту вашего макета).).После этого установите подклассный макет в качестве основного вида для вашей деятельности с помощью setContentView ().Теперь вы сможете обрабатывать события отображения / скрытия окна IMM.Если это звучит сложно, это не так.Вот код:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<EditText
android:id="@+id/SearchText"
android:text=""
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="34dip"
android:singleLine="True"
/>
<Button
android:id="@+id/Search"
android:layout_width="60dip"
android:layout_height="34dip"
android:gravity = "center"
/>
</LinearLayout>
Теперь внутри вашей Activity объявите подкласс для вашего макета (main.xml)
public class MainSearchLayout extends LinearLayout {
public MainSearchLayout(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.main, this);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Log.d("Search Layout", "Handling Keyboard Window shown");
final int proposedheight = MeasureSpec.getSize(heightMeasureSpec);
final int actualHeight = getHeight();
if (actualHeight > proposedheight){
// Keyboard is shown
} else {
// Keyboard is hidden
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Вы можете видеть изкод, который мы раздуваем макет для нашей деятельности в конструкторе подкласса
inflater.inflate(R.layout.main, this);
А теперь просто установите представление содержимого для подкласса макета для нашей деятельности.
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainSearchLayout searchLayout = new MainSearchLayout(this, null);
setContentView(searchLayout);
}
// rest of the Activity code and subclassed layout...
}