2016-05-15 85 views
0

我不知道该如何安排。已经尝试了许多方法。
我需要后,锁定键盘隐藏LinerLayout,此代码不起作用。在打开的键盘按钮被按下时隐藏LinearLayout一次返回

我该如何安排?

<LinearLayout 
     android:id="@+id/menu" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:visible="visible"> 

     <TableRow 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/mark" 
      android:gravity="center" 
      android:padding="@dimen/Content"> 

      <EditText 
       android:id="@+id/greeting" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:hint="@string/greeting_default" 
       android:layout_weight="1" 
       android:textColor="@color/text_on_white" 
       android:background="@color/mark"/> 

      <Button 
       android:id="@+id/greeting_ok" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:background="@color/mark" 
       android:textColor="@color/text_on_white" 
       android:text="@string/greeting_ok"/> 

     </TableRow> 

    </TableLayout> 

语境CustomLinearLayout.class

package my.package; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class CustomLinearLayout extends LinearLayout { 

    Context context; 

    public CustomLinerLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context = context; 
    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      LinearLayout menu = (LinearLayout) findViewById(R.id.menu); 
      menu.setVisibility(GONE); 

     } 
     return false; 
    } 
} 

Profile.class

package my.package; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewTreeObserver; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.view.inputmethod.EditorInfo; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.FrameLayout; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ScrollView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.ViewFlipper; 

import java.lang.reflect.Array; 

public class Profile extends AppCompatActivity { 

    CustomLinearLayout menu; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_application); 


     menu = (CustomLinearLayout) findViewById(R.id.menu); 

     menu.setVisible(View.VISIBLE); 



    } 




    } 
+0

光校正和格式化 – LoicTheAztec

回答

0

我认为问题是,你的CustomLinearLayout没有焦点,因此它不会收到任何键盘事件。你可以做的是让它可聚焦无论是在XML或代码:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_application); 
    menu = (CustomLinearLayout) findViewById(R.id.menu); 
    menu.setVisible(View.VISIBLE); 

    menu.setFocusable(true); 
    menu.setFocusableInTouchMode(true); 
} 

另外在你的布局类,你需要返回true如果事件已处理,以防止系统来处理它:

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     LinearLayout menu = (LinearLayout) findViewById(R.id.menu); 
     menu.setVisibility(GONE); 

     return true; 
    } 

    return false; 
} 

但是这不会帮助你,例如,EditText你注意到后onCreate