正如这里简洁描述的那样,在Java中覆盖私有方法是无效的,因为父类的私有方法是"自动最终的,并且从派生类中隐藏".我的问题主要是学术问题.
如何不允许父级的私有方法被"覆盖"(即,在子类中使用相同的签名独立实现),是不是违反封装?根据封装原则,子类无法访问或继承父级的私有方法.它是隐藏的.
那么,为什么要限制子类使用相同的名称/签名实现自己的方法呢?有没有一个很好的理论基础,或者这只是某种实用的解决方案?其他语言(C++或C#)对此有不同的规定吗?
我正在EditText为传统的蒙古人做垂直.我通过EditText在旋转的内部嵌入一个略微修改的内容来成功实现它ViewGroup.我需要创建一个完全自定义的上下文菜单,因为系统不支持垂直文本,并且在旋转时也不会ViewGroup旋转.所以我想完全禁用系统上下文菜单.
请注意,这与仅仅尝试禁用复制/粘贴/等的这些问题不同:
虽然我没有在模拟器中出现上下文菜单,但我将它出现在我的Android 5.0.2小米手机中.
我试过了:
我对hacks持开放态度,但我需要它能够在各种设备上持续工作.马克·墨菲(下议院人)写了一段时间,早在回答其他用户试图做同样的事情:
我怀疑,即使你拿出一个答案,它也无法在各种设备上运行.设备制造商倾向于为EditText推出自己的"上下文菜单",从而使开发人员尝试将项目添加到该上下文菜单中.我的猜测是,试图阻止该上下文菜单会产生类似的结果.
我运气不好吗?
我现在唯一能想到的就是完全重写TextView并EditText从头开始(好吧,通过修改Android源代码).我知道其他人做了类似的事,但他的代码不是开源的.在我采取这一重大步骤之前,我想尝试在Stack Overflow上寻求更简单的解决方案.
更新:我一直在尝试修改TextView过去两天的源代码,看起来像是一个6个月的项目.这是一大堆相互关联的课程.我需要另一种解决方案,但我没有想法.
MVCE
这是我能想到的最简单的方法来重现问题.我的习惯没有必要EditText.布局有一个EditText替换默认项目Hello World的TextView.我将min API更改为11以避免处理已弃用的方法.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.edit_text);
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu …Run Code Online (Sandbox Code Playgroud) android contextmenu android-edittext mongolian-vertical-script
我的目标是拥有一个EditText没有花哨功能,只有文本选择处理程序更容易移动光标 - 所以没有上下文菜单或弹出窗口.
根据此解决方案,我已通过使用ActionMode Callback事件禁用了文本编辑功能操作栏(复制/粘贴等)的外观.
当文本存在于字段中并且文本中出现单击时,仍然会出现中间中间文本选择句柄(请参见下图).大!我想保持这种行为.我不想要的是单击文本选择句柄本身时出现的"粘贴"菜单.

我还通过设置android:longClickable="false"样式XML 禁用了EditText的长按输入.禁用长按可防止单击鼠标(即长按)时出现"粘贴/替换"菜单,但是当在文本中单击鼠标(单触)时,会出现文本选择手柄,并且单击文本选择手柄本身,然后出现"粘贴"菜单选项(当剪贴板中有文本时).这就是我想要阻止的.
从我从源头看到的内容,ActionPopupWindow就是PASTE/REPLACE选项弹出的内容.ActionPopupWindow是公共类android.widget.Editor中私有抽象类HandleView中的受保护变量(mActionPopupWindow)...
如果没有禁用剪贴板服务或编辑Android源代码,有没有办法阻止它显示?我试图定义一个新的样式android:textSelectHandleWindowStyle,并设置android:visibility为gone,但它不起作用(应用程序冻结了一段时间,否则它会显示).
我正在努力避免在智能手机中剪切/复制/粘贴(对于平板电脑来说它很好).它在端口模式下很好但是在陆地模式下EditText显示了一个Button Next.选择文本后,下一步按钮将转换为具有复制,剪切和粘贴选项的编辑按钮.
因此,当出现编辑按钮时,有没有办法在旋转后禁用剪切/复制.
我正在关注此链接. 如何禁用从/到EditText的复制/粘贴


我正在寻找一个解决方案来禁用长按编辑菜单(复制/粘贴)以及双击select-all功能的edittext框.我已经在这里以类似的方式阅读了这个问题的一些解决方案,但是,需要更进一步.
对于这个应用程序,我要求阻止用户在我的应用程序上使用复制/粘贴功能,并需要一种方法来禁用此功能,该功能将适用于2.3 API以及在较新的平板电脑上使用时.我正在使用NexusOne手机设备和Galaxy平板电脑进行测试.(minSDK为8,目标为10)
目前我正在使用它(例如):edittextPassword.setLongClickable(false); - 禁用弹出编辑菜单,太棒了!
此方法适用于电话设备,以防止编辑菜单弹出.在平板电脑上,这也是长按动作禁用的.然而,平板电脑具有双击的新功能,可以选择所有文本并打开编辑菜单.有没有办法让较旧的API取消/捕获/禁用较新的API功能或阻止双击手势?
更新:使用连接到GestureDetector的setLongClickable(false)和setOnTouchListener的组合(感谢Nikola的建议)我可以从打开中捕获/取消双击和长按编辑菜单.
接下来要弄清楚的是......在三星手机上(Galaxy S,目前还不确定其他设备),当你点击一个字段时,你会得到一个光标和一个浮动光标指针按钮(正确的名字? ).单击此指针按钮是打开编辑菜单的另一种方法.有谁知道如何禁用这个?我唯一的解决方法是使用TextWatcher清除BeforeTextChanges和AfterTextChanges上的剪贴板.这样可以确保即使您进入"复制/粘贴"菜单,也会清除剪贴板并且无需粘贴任何内容.
我有一个EditText不允许粘贴的要求,但应该允许复制。我试过了,setCustomSelectionActionModeCallback但是它禁用了复制选项。
EditText etxt = (EditText) findViewById(R.id.editText1);
etxt.setCustomSelectionActionModeCallback(new 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;
}
});
Run Code Online (Sandbox Code Playgroud) 我对 EditText 的属性有这个愚蠢且看似微不足道的问题。
我试图为 EditText 实现的属性如下:
视图的内容不应包含换行符。它可以是文本、数字、符号,但不能是换行符。
由于上述原因,软键盘不应显示输入按钮。它应该显示类似“发送”或“完成”的内容。
当到达屏幕边缘时,视图的内容不应水平继续。相反,我想包装文本,将其显示在多行上。
我尝试了许多不同的组合,但我无法实现这种组合。
我目前拥有的是这个,它在一个RelativeLayout里面:
<EditText
android:id="@+id/comment_box"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_below="@id/preparation_text"
android:hint="@string/comment_hint"
android:inputType="textCapSentences|textAutoCorrect|text"
android:scrollHorizontally="false"
android:maxLength="400"
android:imeOptions="actionSend"/>
Run Code Online (Sandbox Code Playgroud)
它实现了 2 of 3。不可能换行,键盘显示“发送”而不是我的回车键,但文本继续在一行上。
更改inputType="text"为"textMultiLine"在多行上正确换行文本,但也会覆盖键盘以始终显示输入按钮。
我在 Internet 上尝试了不同的解决方案,包括设置属性maxLines="4",singleLine="true"以及可能我又忘记了的其他解决方案。
我找不到有效的组合。
我是Android开发领域的新手,最近我遇到了一个棘手的问题.
我试图创建一个Edittext,它不应该允许用户从中复制内容或将内容粘贴到其中.我搜索了很多,发现似乎有两种流行的方式:
第一种方式,在布局文件中设置它:
android:longClickable="false"
Run Code Online (Sandbox Code Playgroud)
第二种方式,以编程方式设置它:
myEdittext.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;
}
});
Run Code Online (Sandbox Code Playgroud)
但我发现无论我选择哪种方式,只能通过长按来禁用edittext区域,这会阻止用户通过长按来访问"全选,复制和粘贴"菜单.但是这两个解决方案都不能阻止用户通过简单地点击光标来访问"粘贴"功能.
所以我的问题是:我怎么能完全阻止用户在某个Edittext中复制和粘贴功能.有人帮忙吗?多谢
我正在上禁用xamarin形式的复制/粘贴选项菜单项,我能够禁止使用复制选项IsPassword =真实属性,但这种属性也将转换成正常输入字段密码字段,它不是必需的.
<Entry IsPassword="true" Placeholder="Password" TextColor="Green" BackgroundColor="#2c3e50" />
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我正在使用以下代码,但是当光标闪烁并单击该粘贴按钮显示时它不起作用。
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;
}
});
Run Code Online (Sandbox Code Playgroud)
我不想隐藏光标。
我该如何解决这个问题?
android ×8
contextmenu ×2
copy-paste ×2
gesture ×1
inheritance ×1
java ×1
smartphone ×1
xaml ×1
xml ×1