我正在编写一个类似终端的应用程序(实际上是一个ssh客户端)。我现在拥有的是TextView
,它输出响应,并在底部固定EditText
来输入命令。
我试图将EditText
附加到TextView
输出的末尾(动态),就像在真正的终端中一样:
[TextView]root@whatever:~#[EditText] |command
关于如何做到这一点的任何想法?
我会尽力澄清我想要完成的事情。
我无法设置固定权重,导致更多文本被异步添加到TextView
,因为更多字节从流中到达。 LinearLayout解决方案没有在EditText
输入的末尾设置TextView
光标位置。我尝试过RelativeLayout toRightOf,但EditText
刚刚离开屏幕TextView
被填充。
我想要的是什么:
答案 0 :(得分:1)
在您的代码中尝试此操作,根据您的要求为视图添加权重
LinearLayout linearLayout=new LinearLayout(this);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
linearLayout.setLayoutParams(params);
linearLayout.setWeightSum(1.0f);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
TextView textView=new TextView(this);
EditText editText=new EditText(this);
textView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
0.5f));
editText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
0.5f));
linearLayout.addView(textView);
linearLayout.addView(editText);
答案 1 :(得分:0)
为了避免在不同的屏幕尺寸上,editText被“吃掉”,最好使用layout_weight。例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/yourTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<EditText
android:id="@+id/yourEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
这样,两个视图将具有相同的尺寸(长度,高度)。您可以使用layout_weight属性。如果您希望TextView大于EditText,请将textView的权重设置为0.25,将EditText的权重设置为0.75。反之亦然。
如果您想拥有一个用户无法更改的静态文本,您可以执行以下操作:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:id="@+id/yourEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
/>
<TextView
android:id="@+id/yourTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/yourEditText"
android:layout_alignBaseline="@+id/yourEditText"
android:text="C:\" />
</RelativeLayout>
我现在无法测试它,但它应该提示你如何做到这一点。
答案 2 :(得分:0)
通过在EditText
(etShell)上的每次追加后更新TextView
(etInput)位置来解决:
Layout layout = etShell.getLayout();
int pos = etShell.length();
int line = layout.getLineForOffset(pos);
int baseline = layout.getLineBaseline(line);
int ascent = layout.getLineAscent(line);
float x = layout.getPrimaryHorizontal(pos);
float y = baseline + ascent;
etInput.setMaxWidth(width - (int) x);
etInput.setX(x);
etInput.setY(y);