答案 0 :(得分:3)
这是一个有点愚蠢的问题,我知道.. 最简单的解决方法是(并保持居中文本)使用这个简单的黑客:
public class TestClass extends javafx.application.Application
{
@Override
public void start(javafx.stage.Stage primaryStage)
{
javafx.scene.control.Button button = new javafx.scene.control.Button("click me");
button.setOnAction((javafx.event.ActionEvent event) -> { chooseImageAndDisplay(); });
javafx.scene.layout.BorderPane pane = new javafx.scene.layout.BorderPane();
pane.setCenter(button);
pane.setPrefSize(300, 200);
javafx.scene.Scene scene = new javafx.scene.Scene(pane);
primaryStage.setTitle("imageViewer");
primaryStage.setScene(scene);
primaryStage.show();
}
private void chooseImageAndDisplay()
{
javafx.stage.FileChooser fc = new javafx.stage.FileChooser();
fc.getExtensionFilters().addAll(new javafx.stage.FileChooser.ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"));
java.io.File selectedFile = fc.showOpenDialog(null);
if (selectedFile != null)
{
String location = (selectedFile.getAbsoluteFile().toURI().toString());
javafx.scene.layout.BorderPane pane = new javafx.scene.layout.BorderPane();
pane.setPrefSize(300, 200);
javafx.scene.image.ImageView iw = new javafx.scene.image.ImageView(location);
pane.setCenter(iw);
javafx.scene.Scene scene = new javafx.scene.Scene(pane);
javafx.stage.Stage stage = new javafx.stage.Stage();
stage.setTitle("imageViewer");
stage.setScene(scene);
stage.show();
}
}
public static void main(String[] args)
{
launch(args);
}
}
答案 1 :(得分:3)
当EditText
集中注意力时,您可以隐藏提示
使用我的自定义EditText
:
https://gist.github.com/repitch/2ca5b01a842609cfe26f3a41f825a300
public class HintHideEditText extends EditText {
private CharSequence savedHint;
public HintHideEditText(Context context) {
super(context);
}
public HintHideEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public HintHideEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
validateHint(focused);
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
public CharSequence getSavedHint() {
return savedHint;
}
public void setSavedHint(CharSequence savedHint) {
this.savedHint = savedHint;
validateHint(hasFocus());
}
public void setSavedHint(@StringRes int resid) {
setSavedHint(getContext().getResources().getText(resid));
}
private void validateHint(boolean focused) {
if (focused) {
savedHint = getHint();
}
setHint(focused ? "" : savedHint);
}
}
答案 2 :(得分:2)
我也遇到了同样的问题,想到了两种可能的变种:
<强> 1。很简单
提示中间的光标看起来很不愉快
所以我只是删除提示,使editText获得焦点,否则将其设置为:
'myuser'@'localhost'
<强> 2。一些硬编码
在这种情况下:
如果editText为空:
- 设置文字提示
- 将textColor设置为hintColor
- 禁用文本选择
- 在文本(background-size: contain
)
如果用户输入任何符号
- 用&#34;&#34;&替换提示
- 将textColor设置回textColor
- 启用文本选择
步骤:
2.1添加TextWatcher
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
editText.setHint(hasFocus ? "" : "My hint");
}
});
2.2设置焦点更改侦听器:
setSelection(0)
2.3方法editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { // empty }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { // empty }
@Override
public void afterTextChanged(Editable s) {
processChangedText(s);
}
});
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
processChangedText(editText.getText());
}
}
});
2.4启动器/禁用器光标移动方法(可能不是一个好的选择,创建自己的EditText覆盖onSelectionChanged方法更好)
processChangedText(Editable s)
P.S。我真的建议你使用第一个变体,它很简单,看起来很不错。
答案 3 :(得分:1)
在视图膨胀后,将以下代码放入代码中:
EditText editText = (EditText)findViewById(R.id.loginEmailField);
editText.setSelection(0);
它会将插入符号放在提示文本的开头。一旦你开始输入,文字将保持居中,插入符号将在你输入的内容结束时移动。
答案 4 :(得分:0)
没有直接的方法,但您可以尝试使用以下代码
<FrameLayout
android:layout_width="match_parent"
android:layout_height="48dp">
<EditText
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_gravity="center"
android:hint="You text here"/>
</FrameLayout>
为父框架布局提供下划线背景,并在其点击上将焦点放在editext上
答案 5 :(得分:0)
而不是使用编辑文本的提示:
gravity="left"
- 这样光标就会位于视图的左侧。将两个视图(EditText和TextView)放在RelativeLayout中 - 这样您就可以将提示视图放在TextView后面。
答案 6 :(得分:0)
试试我的代码:
android:textCursorDrawable="@null"
答案 7 :(得分:0)
您可以添加其他View
以下编辑文字以模拟编辑文字行,将编辑文字背景设置为null
,将宽度设置为wrap_content
,将layout_gravity
设置为居中。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:cursorVisible="true"
android:ellipsize="start" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffffff" />
</LinearLayout>
答案 8 :(得分:0)
在xml中,EditText
必须具有android:layout_width="wrap_content"
。
然后,按如下所示设置代码:
final EditText msgTxt = (EditText) view.findViewById(R.id.edtTxt);
msgTxt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() != 0){
msgTxt.setGravity(Gravity.CENTER);
}
else{
msgTxt.setGravity(Gravity.CENTER_VERTICAL);
}
}
});