gpt4 book ai didi

Android - Horizo​​ntalScrollView 在键盘打开时向右滚动

转载 作者:太空狗 更新时间:2023-10-29 13:17:35 24 4
gpt4 key购买 nike

我的应用程序有一个总体布局,其中包括一个水平 ScrollView 。我正在做的是向 ScrollView 添加 32 个 fragment (它膨胀成带有两个按钮和一个 editText 的垂直线性布局。它们将成为均衡器的控件)。

问题是,当我尝试编辑其中一个 editText 时, ScrollView 一直向右滚动 - 因此您无法看到正在输入的内容,并且必须一直滚动回到该条目以查看它。

这是主要的 xml 布局。它将屏幕分成 4 个象限,水平 ScrollView 位于右下角:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity"
android:focusable="true"
android:focusableInTouchMode="true">

<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:padding="4dp"
android:orientation="vertical"
android:layout_weight="2"
>
<TextView android:text="Hello World!" android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="4"
android:padding="4dp"
android:orientation="vertical"
android:background="#FF0000"
>
<TextView android:text="Hello World!" android:layout_width="wrap_content"
android:layout_height="wrap_content" />


<HorizontalScrollView
android:id="@+id/hsv_eqControls"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dp"
android:background="#FFFFFF"
android:descendantFocusability="beforeDescendants"
android:focusable="true"
android:focusableInTouchMode="true"
>

<LinearLayout
android:id="@+id/layout_eqControls"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">

</LinearLayout>

</HorizontalScrollView>
</LinearLayout>

</LinearLayout>

这就是我要添加到 ScrollView 中的内容

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="3dp"
android:orientation="vertical">
<Button
android:id="@+id/btn_eqUp"
android:layout_width="60dp"
android:layout_height="60dp" />
<EditText
android:id="@+id/etext_eq"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:inputType="numberDecimal|numberSigned"
android:textAlignment="center"
android:layout_gravity="center_horizontal"
android:background="#EEEEEE"
android:hint="32dB"/>
<Button
android:id="@+id/btn_eqDown"
android:layout_width="60dp"
android:layout_height="60dp" />
<TextView
android:id="@+id/vtext_eqLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:layout_gravity="center"
android:text="1"/>
</LinearLayout>

这是我运行来填充 ScrollView 的代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// View eqControls = findViewById(R.id.hsv_eqControls);

FragmentTransaction ft = getFragmentManager().beginTransaction();
for(int i = 1; i < 33; i++)
{
ft.add(R.id.layout_eqControls, new FragmentEQ(), "ch"+i);
}

ft.commit();
getFragmentManager().executePendingTransactions();
for(int i = 1; i < 33; i++)
{
FragmentEQ feq = (FragmentEQ) getFragmentManager().findFragmentByTag("ch"+i);
if(feq != null)
feq.setChannel(i);
}

}
}

这是我的 fragment 的代码:

public class FragmentEQ extends Fragment {
protected int _channel = 0;
protected ViewGroup _parent;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.activity_fragment_eq, container, false);
TextView label = (TextView) view.findViewById(R.id.vtext_eqLabel);

label.setText(Integer.toString(_channel));
return view;
}

public int getChannel() { return _channel; }

public void setChannel(int i)
{
_channel = i;
}
}

我已经尝试创建一个自定义的 Horizo​​ntalScrollView,并将 scrollTo() 和 onRequestFocusInDescendants() 覆盖为不执行任何操作的空白方法,但这没有任何改变。

public class EQScrollView extends HorizontalScrollView {

public EQScrollView( Context context, AttributeSet attrs)
{
super(context, attrs);
setSmoothScrollingEnabled(false);
}

@Override
public void scrollTo(int x, int y)
{

}

@Override
public boolean onRequestFocusInDescendants(int x, Rect y)
{

return false;
}

}

最佳答案

使用“设置原始输入类型”:

setRawInputType(InputType.TYPE_CLASS_NUMBER);

首先为我解决了这个问题。在意识到某些数字键盘不提供小数输入后,我最终为 EditText 使用标准文本输入,扩展了 Horizo​​ntalScrollView 并覆盖了“onRequestFocusInDescendants”、“requestChildRectangleOnScreen”和“getFocusables”,如下所示:

public class HorizontalScrollViewEx extends HorizontalScrollView {
public HorizontalScrollViewEx(Context context) {
super(context);
}

public HorizontalScrollViewEx(Context context, AttributeSet attrs) {
super(context, attrs);
}

public HorizontalScrollViewEx(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

public HorizontalScrollViewEx(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

@Override
protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
return true;
}

@Override
public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {
return true;
}

@Override
public ArrayList<View> getFocusables(int direction) {
return new ArrayList<View>();
}
}

关于Android - Horizo​​ntalScrollView 在键盘打开时向右滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33156528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com