【问题标题】:Android EditText pushed down by action bar操作栏下推的Android EditText
【发布时间】:2015-11-16 15:38:26
【问题描述】:

我在基于 Android cocos2d-x 的游戏中添加了一个 EditText。

“选择剪切复制粘贴”操作栏将我的编辑框向下推。

而我想要的是这样的:

这是我设置编辑框位置的代码:

public void setEditBoxViewRect(int left, int top, int maxWidth, int maxHeight) {
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
                                                                        FrameLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.leftMargin = left;
    layoutParams.topMargin = top;
    layoutParams.width = maxWidth;
    layoutParams.height = maxHeight;
    layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
    this.setLayoutParams(layoutParams);
}

我认为问题在于我自定义了 EditText 布局。当操作栏显示时,我没有响应相关事件来调整我的 EditText 位置。

我可以监听菜单栏显示的事件并获得正确的高度来调整我的 EditText 吗?

我试过这段代码,但它只是禁用了操作栏:

edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        public void onDestroyActionMode(ActionMode mode) {

        }

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }
    });

【问题讨论】:

    标签: android layout android-actionbar android-edittext


    【解决方案1】:

    关键答案是android:windowActionModeOverlay

    res/style.xml定义一个新主题扩展你原来的主题:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <style name="Theme.Black.NoTitleBar.ActionModeOverlay" parent="android:Theme.Black.NoTitleBar">
        <item name="android:windowActionModeOverlay">true</item>
      </style>
    </resources>
    

    如果您已经定义了主题,则只需在主题中添加一行 &lt;item name="android:windowActionModeOverlay"&gt;true&lt;/item&gt;

    让你的活动使用上面AndroidManifest.xml中定义的主题:

    <manifest ...>
    
    
    <application ...>
    
        <activity
            android:name="you.AppActivity"
            android:theme="@style/ActionModeOverlay" >
    

    【讨论】:

      【解决方案2】:
      add styles.xml,like this:
      
      <resources xmlns:tools="http://schemas.android.com/tools">
      
      
          <style name="Activity.Theme.Full" parent="@android:style/Animation.Activity">
              <item name="android:windowFullscreen">true</item>
              <item name="android:windowNoTitle">true</item>
          </style>
      
      </resources>
      
      change manifest like this:
      
      <activity android:name=".AppActivity"
                        android:label="@string/app_name"
                        android:screenOrientation="sensorLandscape"
      
                        android:theme="@style/Activity.Theme.Full" 
      
      notice that the build target is 22 (i only test it) or more
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 1970-01-01
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        相关资源
        最近更新 更多