当用户点击时EditView,Android会打开键盘,以便用户可以写入EditView.
问题是,当用户完成写入时,无法隐藏键盘.用户必须按后退按钮才能隐藏键盘.
有没有办法Done在键盘上显示隐藏键盘的按钮?
我继承了values下面显示的文件夹结构.
一个多小时后,我用谷歌搜索并查看并下载Android Studio 1.2.2中的菜单并尝试创建文件和文件夹,但是我所做的一切都没有让我添加,例如dimens.xml (sw720dp).
我删除了dimens.xml (sw720dp - landscape)因为landscape不符合我的需要.
创建文件夹结构的人员采取了哪些步骤dimens.xml (sw600dp)才能出现在结构中?
dimens.xml使用sw<N>dp文件命名约定获取文件需要采取哪些步骤?我如何获得dimens.xml (sw720dp)它所属的位置?
您可以忽略其余部分.我只是表明我已经尝试了一些东西,其中没有一个正常.
我应该右键单击values还是dimens.xml (2)?然后怎样呢?
这就是我所做的,并没有按照我的要求做到:
我也尝试过:
编辑
我也试过复制sw600dp文件.没运气:
这不可能是这么难.
我试图看看今天早些时候是否可以回答这个问题.我意识到我并不完全理解Event Dispatch Thread(EDT).谷歌搜索确认并帮助了这一点,并澄清了为什么我没有.(这也可能与理解有关.)
代码设置GUI,稍后(如前面的问题中所述)更新文本字段,直到取消设置标志.
我有几个问题/要求.
请解释为什么如果两个调用(to swingInit和doIt)都在invokeLater块之外(如图所示),下面的代码运行正常,因为这两个调用都影响或查询GUI但是它们都没有在EDT上执行(是吗?).这不是诱人的失败吗?
如果呼叫在swingInit内部和doIt外部,代码也会运行invokeLater.所以swingInit在EDT上执行,但不应该doIt在EDT上执行是一个问题吗?(我觉得这很有效.我应该去过吗?)
我想我明白为什么它会挂起,如果doIt它在里面invokeLater而不管它在哪里swingInit:目的invokeLater只是初始化 GUI(对吧?).
如果doIt只启动(可能发生的事件)在美国东部时间,但肯定不是里面invokeLater块?
(EDT概念的历史很有意思.它并不总是如此.请参阅上面的链接"我为什么不"理解它.)
import static java.awt.EventQueue.invokeLater;
import java.awt.event.*;
import javax.swing.*;
public class Whatever
{
static boolean flag = true;
static JTextField tf = new JTextField("Hi",20);
static JPanel …Run Code Online (Sandbox Code Playgroud) 我正在使用listview,listview中每个项目的布局如下.
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="15dp">
<TextView
android:id="@+id/barcodeTv"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/pdtDescTv"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:maxLength="40"
android:layout_marginLeft="5dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/qtyTv"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:ems="10"
android:layout_marginLeft="5dp"
android:gravity="center"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/retndQtyTv"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:ems="10"
android:layout_marginLeft="5dp"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText
android:id="@+id/retQtyEt"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:ems="10"
android:layout_marginLeft="5dp"
android:gravity="center"
android:hint="@string/return_quantity"
android:imeOptions="flagNoExtractUi|actionDone"
android:inputType="number"
android:singleLine="true"/>
<Spinner
android:id="@+id/mrpSpr"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:gravity="center"/>
<EditText
android:id="@+id/mrpEt"
android:layout_width="75dp"
android:layout_height="wrap_content"
android:layout_gravity="center" …Run Code Online (Sandbox Code Playgroud) 这很好用,向我展示了放入 Android 剪贴板的最后一个字符串是什么,恰好是euswcnmst.
Log.w("clip", clipboard.getText().toString());
但getText不推荐用于clipboard对象。
同时,如果我这样做 Log.w("clip", clipboard.getPrimaryClip().toString());,我会得到这个,完全如图所示
ClipData { text/plain "label" {T:euswcnmst} }
我知道我想要什么,并且假设这种格式总是用于字符串剪贴板项目,我可以使用String函数( find:和后续}和 do substring)来提取euswcnmst,但这是一个黑客。
我该怎么办?
编辑
基于 Commonsware 的回答,这是我应该做的:
ClipData clip = clipboard.getPrimaryClip();
if(clip == null || clip.getItemCount() == 0)
return; // ... whatever; just don't go to next line
String t = clip.getItemAt(0).getText().toString();
Run Code Online (Sandbox Code Playgroud)
编辑 2
如果剪贴板中的最后一个 ITEM 不是文本,则上面的代码会出现以下错误:
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' …
我通过遵循此链接中的精彩概述而不使用ECLIPSE来制作了“自定义键盘” 。我使用的是Android Studio(AS)1.1.0。
这是我设备上的屏幕截图:

唯一的问题是,该过程需要更改的设置Language and Input,并且还替换了FOR ALL APPS的键盘。我不要 我只希望我的应用更改ITSELF的键盘,然后在我的应用退出屏幕后立即恢复为以前的键盘,否则我将在用户屁股上造成极大的痛苦。除了这样做,我还可以添加按钮以执行希望通过自定义键盘调用的按键。(这并不可怕;用户只需要拉下通知栏并选择选择输入法即可,但对于大多数用户而言仍然太麻烦了。)
结构如下:

qwerty.xml通过执行以下操作可以更改键盘:
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="10%p"
android:horizontalGap="0px"
android:verticalGap="0px"
android:keyHeight="60dp"
>
<Row>
<Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
<Key android:codes="50" android:keyLabel="2"/>
<Key android:codes="51" android:keyLabel="3"/>
<Key android:codes="52" android:keyLabel="4"/>
<Key android:codes="53" android:keyLabel="5"/>
<Key android:codes="54" android:keyLabel="6"/>
<Key android:codes="55" android:keyLabel="7"/>
<Key android:codes="56" android:keyLabel="8"/>
<Key android:codes="57" android:keyLabel="9"/>
<Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
</Row>
...
Run Code Online (Sandbox Code Playgroud)
这里是method.xml:
<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android">
<subtype
android:label= "@string/subtype_en_US"
android:imeSubtypeLocale= "en_US"
android:imeSubtypeMode= "keyboard"
/>
</input-method> …Run Code Online (Sandbox Code Playgroud) 有没有聪明的方法来避免将第一块代码重复十几次?第二个块与第一个块的形式相同,我还有几个具有相同形式的块。我正在考虑一系列EditText字段(好主意?坏 [为什么?]?)但是有没有一种全局方法可以让一个块捕获所有焦点变化?
txtExclude.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus)
{
if (!hasFocus)
if (txtExclude.getText().length() == 0)
txtExclude.setBackgroundColor(Color.WHITE);
}});
txtRequired.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus)
{
if (!hasFocus)
if(txtRequired.getText().length() == 0)
txtRequired.setBackgroundColor(Color.WHITE);
}});
Run Code Online (Sandbox Code Playgroud)
编辑
第一个答案的非工作实现:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnFocusChangeListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); // call superclass's version
setContentView(R.layout.activity_main); // inflate the …Run Code Online (Sandbox Code Playgroud) 为什么AS告诉我这(ob instanceof Button)总是false?
此外,它给了"暗示" 'Cast to Button'.如果我接受提示,没有任何改变.
void setTextSizeForField(int textSize, Object ... obs){
for(Object ob: obs)
if (ob instanceof EditText) ((EditText) ob).setTextSize ( textSize );
else if (ob instanceof TextView) ((TextView) ob).setTextSize ( textSize );
else if (ob instanceof Button) ((Button) ob).setTextSize ( textSize/10 );
}
Run Code Online (Sandbox Code Playgroud)
消息的全文是:
Condition 'ob instanceof Button' is always 'false' less... (Ctrl+F1)
This inspection analyzes method control and data flow to report possible conditions that are
always true or false, expressions …Run Code Online (Sandbox Code Playgroud) 我找到了两个 SO 线程,它们告诉我如何在对象中居中标题和消息,AlertDialog并通过编写我希望能够调用以居中 any 的方法来伪造我的方式AlertDialog。它在手机和平板电脑上运行良好,甚至可以显示多行消息,无论是否带有'\n's。
public void showCenteredInfoDialog(TextView _title, TextView _message) {
_title.setGravity(Gravity.CENTER);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositiveButton("OK", null);
builder.setCustomTitle(_title);
builder.setMessage(_message.getText());
AlertDialog dialog = builder.show();
TextView messageView = (TextView)
dialog.findViewById(android.R.id.message);
messageView.setGravity(Gravity.CENTER);
}
Run Code Online (Sandbox Code Playgroud)
我做了大量的定制——即,我对我的发现和所做的事情有一些线索——但有一行让我想知道:
TextView messageView = (TextView) dialog.findViewById(android.R.id.message);
什么是 android.R.id.message?
这是我能找到的所有相关文档:
android.R.id
public static final int message = 16908299
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到有关Android.R.id对象(以及更多)的更多文档?这似乎是一个可能的金矿。
android ×8
java ×3
keyboard ×2
xml ×2
clipboard ×1
debugging ×1
instanceof ×1
invokelater ×1
lost-focus ×1