草庐IT

android - onLongClick 时,AutoCompleteTextView 在剪切/复制/粘贴菜单上出现奇怪的裁剪问题

coder 2023-12-16 原文

我在显示剪切/复制/粘贴菜单时遇到问题。在 AutoCompleteTextView 中写入字符串后,在单词打开剪切/复制/粘贴菜单的第一个选择(长按)中。不幸的是,此菜单已从其原始位置错位。

有趣的是,当我单击左右选择指示器来更改单词的范围时,剪切/复制/粘贴菜单会自行呈现并更正其位置。现在可以单击剪切/粘贴/复制操作按钮。

我已尝试更改所有内容以找出导致此问题的原因,但没有任何更改。我认为某些东西会在错误的位置触发 android 的默认剪切/复制/粘贴菜单并进行裁剪。不幸的是我找不到它是什么。

欢迎任何建议。谢谢。


可能出现这个问题的事情:

  • 在 AndroidManifest.xml -> 相关 Activity 中,“android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
  • 在 AndroidManifest.xml -> 相关 Activity 中,“android:theme=@style/customTheme”
  • 在 AndroidManifest.xml -> 相关 Activity 中,android:windowSoftInputMode="adjustPan"
  • 在 MyDialogFragment.java -> 设置 actionBar 时

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example"
    android:installLocation="auto">


    <uses-permission android:name="com.example.permission.C2D_MESSAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.camera.autofocus"
        android:required="false" />


    <application
          android:name="com.example.MainApplication"
          android:hardwareAccelerated="true"
          android:icon="@drawable/icon"
          android:label="@string/app_name"
          android:largeHeap="true"
          android:theme="@style/ExampleTheme">


        <activity
            android:name="com.example.MainActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:launchMode="singleTask"
            android:screenOrientation="sensorPortrait"
            android:theme="@style/ExampleTheme"
            android:windowSoftInputMode="adjustPan" />

        <activity
            android:name="com.example.SplashScreen"
            android:launchMode="singleTop"
            android:screenOrientation="sensorPortrait"
            android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>



    </application>


</manifest>

主题.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <style name="ExampleTheme" parent="Theme.AppCompat.Light">
        <item name="android:editTextStyle">@style/Widget.EditText</item>
        <item name="android:windowBackground">@color/app_bg</item>
        <item name="android:listViewStyle">@style/TransparentListView</item>
        <item name="buttonStyle">@style/ButtonStyle</item>
        <item name="android:alertDialogStyle">@style/customDialogTheme</item>
        <item name="android:alertDialogTheme">@style/customDialogTheme</item>
        <item name="android:expandableListViewStyle">@style/TransparentExpandableListView</item>
        <item name="android:spinnerStyle">@style/CustomSpinnerStyle</item>
        <item name="android:dropDownSpinnerStyle">@style/CustomSpinnerStyle</item>
    </style>

    <style name="ButtonStyle" parent="Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
    </style>

    <style name="Widget.EditText" parent="@android:style/Widget.EditText">
        <item name="android:background">@drawable/input_area</item>
    </style>

    <style name="TransparentListView" parent="@android:style/Widget.ListView">
        <item name="android:cacheColorHint">@color/transparent</item>
    </style>

    <style name="TransparentExpandableListView" parent="@android:style/Widget.ExpandableListView">
        <item name="android:cacheColorHint">@color/transparent</item>
    </style>

    <style name="customDialogTheme" parent="android:Theme.Holo.Light.Dialog.NoActionBar">
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:background">@color/transparent</item>
    </style>

    <style name="DialogFullScreenTheme" parent="android:Theme.Dialog">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:windowAnimationStyle">@style/BlurDialogAnimation</item>

        <!-- No backgrounds, titles or window float -->
        <item name="android:windowBackground">@null</item>
        <item name="android:gravity">center</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
    </style>
    <style name="BlurDialogAnimation">
        <item name="android:windowEnterAnimation">@anim/fadein</item>
        <item name="android:windowExitAnimation">@anim/fadeout</item>
    </style>

    <style name="DialogFullScreenThemeHolo" parent="android:Theme.Holo.Light.Dialog">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
        <item name="android:windowAnimationStyle">@style/BlurDialogAnimation</item>

        <!-- No backgrounds, titles or window float -->
        <item name="android:gravity">center</item>
        <item name="android:windowBackground">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
    </style>

    <!-- Overwrite the ToggleButton style -->
    <style name="Widget.Button.Toggle" parent="android:Widget">
        <item name="android:background">@drawable/btn_toggle_bg</item>
        <item name="android:textOn">ON</item>
        <item name="android:textOff">OFF</item>
        <item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
    </style>

</resources>

MyDialogFragment.java:

public class MyDialogFragment extends DialogFragment{
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog d = new Dialog(getActivityInstance(), R.style.DialogFullScreenTheme);
        d.setContentView(R.layout.search_dialog_fragment);
        actionSearchBarET = (AutoCompleteTextView) d.findViewById(R.id.actionSearchBoxACT);
        actionBar = (RelativeLayout) d.findViewById(R.id.actionBar);
        setupSearchBar();
        actionSearchBarET.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
            InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
            } catch (Exception ignored) {}
        }
        });
        actionSearchBarET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionSearchBarET != null && actionSearchBarET.getText() != null && !actionSearchBarET.getText().toString().equalsIgnoreCase("")) {
                    searchWithKeyword(actionSearchBarET.getText().toString());
                }
                return true;
            }
        });
    }

    private void setupSearchBar() {
        TypedValue tv = new TypedValue();
        RelativeLayout.LayoutParams actionBarParams;
        if(getActivityInstance().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
            int actionBarHeight = TypedValue.complexToDimensionPixelOffset(tv.data,     getActivityInstance().getResources().getDisplayMetrics());
            if(actionBarHeight > 0) {
                actionBarParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  actionBarHeight);
            } else {
                actionBarParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  getActivityInstance().getResources().getDimensionPixelOffset(   R.dimen.action_bar_default_height));
            }
        } else {
            actionBarParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  getActivityInstance().getResources().getDimensionPixelOffset(R.dimen.action_bar_default_height));
        }
        actionBar.setMinimumHeight((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,     getResources().getDimension(R.dimen.action_bar_default_height), getResources().getDisplayMetrics()));
        actionBar.setLayoutParams(actionBarParams);

    }
}

search_dialog_fragment.xml:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/white"
    android:paddingBottom="15dp">

    <include
            android:id="@+id/actionBar"
            android:layout_alignParentTop="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            layout="@layout/ab_search_and_textbutton" />

</RelativeLayout>

ab_search_and_textbutton.xml:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:paddingLeft="15dp">

    <!-- Dummy item to prevent EditText from receiving focus -->
    <LinearLayout
        android:id="@+id/dummy"
        android:layout_width="0dip"
        android:layout_height="0dip"
        android:focusable="true"
        android:layout_alignParentRight="true"
        android:focusableInTouchMode="true"
        android:orientation="vertical"/>

    <RelativeLayout
        android:id="@+id/searchBarContainer"
        android:layout_centerVertical="true"
        android:minHeight="@dimen/searchbar_height"
        android:background="@drawable/search_box_bg"
        android:layout_gravity="center"
        android:layout_toLeftOf="@+id/cancelButton"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/searchbar_height">

        <ImageView
            android:id="@+id/searchIcon"
            android:layout_marginLeft="15dp"
            android:layout_centerVertical="true"
            android:src="@drawable/search"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <AutoCompleteTextView
            android:layout_toRightOf="@+id/searchIcon"
            android:layout_marginLeft="3dp"
            android:id="@+id/actionSearchBoxACT"
            android:textSize="14dp"
            android:inputType="textNoSuggestions"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="@string/search"
            android:focusableInTouchMode="true"
            android:focusable="true"
            android:textColor="@color/textcolor_black"
            android:layout_centerInParent="true"
            android:background="@null"
            android:completionThreshold="1"
            android:imeOptions="actionSearch"
            android:nextFocusLeft="@id/actionSearchBoxACT"
            android:nextFocusUp="@id/actionSearchBoxACT"
            android:paddingLeft="5dp"
            android:singleLine="true">
            <requestFocus />
        </AutoCompleteTextView>


    </RelativeLayout>


</RelativeLayout>

最佳答案

剪切/粘贴/复制菜单可能会受到您的主题 xml 的影响。 DialogFullScreenTheme 样式包含重力场。您可以删除该字段,但必须选中所有对话框 ui。

<style name="DialogFullScreenTheme" parent="android:Theme.Dialog">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:windowAnimationStyle">@style/BlurDialogAnimation</item>
        <item name="android:windowBackground">@null</item>

        <!-- Remove this line -->
        <item name="android:gravity">center</item>

        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
    </style>

关于android - onLongClick 时,AutoCompleteTextView 在剪切/复制/粘贴菜单上出现奇怪的裁剪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48537791/

有关android - onLongClick 时,AutoCompleteTextView 在剪切/复制/粘贴菜单上出现奇怪的裁剪问题的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  3. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  4. ruby-on-rails - 浮点乘法的 Ruby 奇怪问题 - 2

    有没有人用ruby​​解决这个问题:假设我们有:a=8.1999999我们想将它四舍五入为2位小数,即8.20,然后乘以1,000,000得到8,200,000我们是这样做的;(a.round(2)*1000000).to_i但是我们得到的是8199999,为什么?奇怪的是,如果我们乘以1000、100000或10000000而不是1000000,我们会得到正确的结果。有人知道为什么吗?我们正在使用ruby​​1.9.2并尝试使用1.9.3。谢谢! 最佳答案 每当你在计算中得到时髦的数字时使用bigdecimalrequire'bi

  5. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

  6. ruby - 在两个 ActiveRecord 类之间合并/复制属性的好方法? - 2

    之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote

  7. ruby - 安装 tiny_tds 在 mac os 10.10.5 上出现错误 - 2

    我正在使用macos,我想使用ruby​​驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System

  8. ruby - Ruby 中的选项菜单 - 2

    我正在尝试在Ruby中创建一个菜单,以便根据用户输入的内容,取决于调用的类。然后在这种情况下它将返回到“Main”或类“Options”。我希望有人能帮助我。这是我的代码。modulePhysicsG=21C=20000Pi=3.14D=100endclassOptionsputs"Pleaseselect1forAccelerationand2forEnergy."option=gets()ifoption==1thenputs"AccelCalc"#ThisisthebitthatneedstodirecttheusertotheclassAccelCalcelseputs"Ene

  9. ruby - 如何让几条 haml 线出现在同一行上? - 2

    我有以下haml:9%strongAskedby:10=link_to@user.full_name,user_path(@user)11.small="(#{@question.created_at.strftime("%B%d,%Y")})"这当前将链接和日期放在不同的行上,当它看起来像“链接(日期)”并且日期的类跨度为小...... 最佳答案 您的代码将生成类似这样的html:Askedby:UsernameApril26,2011当您使用类似.small的东西(即使用点而不指定元素类型)时,haml会创建一个implicit

  10. ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效) - 2

    defreverse(ary)result=[]forresult[0,0]inaryendresultendassert_equal["baz","bar","foo"],reverse(["foo","bar","baz"])这行得通,我想了解原因。有什么解释吗? 最佳答案 如果我使用each而不是for/in重写它,它看起来像这样:defreverse(ary)result=[]#forresult[0,0]inaryary.eachdo|item|result[0,0]=itemendresultendforainb基本上就

随机推荐