【问题标题】:Android EditText Horizontal Scrollbar not MovingAndroid EditText 水平滚动条不移动
【发布时间】:2014-06-05 22:13:20
【问题描述】:

我的编辑文本:

android:scrollbars="horizontal|vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:inputType="textMultiLine|textNoSuggestions"
android:ems="10"
android:gravity="top|left"

我的代码:

myet = (EditText) findViewById(R.id.myedittext);
myet.setScrollbarFadingEnabled(true);
myet.setHorizontallyScrolling(true); 

出于某种奇怪的原因,它确实滚动了,但滚动条本身没有移动,它卡在编辑文本的左下角。

我猜这与没有静态宽度的编辑文本有关。

如何修复水平滚动条,使其可以移动,并且它的大小与最长的行成正比。

注意:它必须是多行并且垂直滚动。

【问题讨论】:

  • 你试过textIsSelectableflag吗?
  • @Wakim,是的,它似乎没有帮助。
  • 你为什么不在 Horizo​​ntalScrollView 中使用 EditText。
  • @Haresh 我试过了,但它对我不起作用,但可能设置不正确。
  • @agam360,尝试只设置一个属性 android:singleLine="true" 并检查会发生什么。

标签: android horizontal-scrolling android-scroll


【解决方案1】:

好吧..我知道这可能不是一个完美的解决方案,但这是我从其他帖子中发现的。

这确实有效,但滚动条上的进度不是很明显。虽然有滚动效果,但绝对可以看到进度。

这是java的代码:

    et = (EditText) getActivity().findViewById(R.id.et1);
    et.setScroller(new Scroller(getActivity())); //This may not be needed.
    et.setHorizontalScrollBarEnabled(true); 
    et.setScrollbarFadingEnabled(true);
    et.setHorizontallyScrolling(true);
    et.setMovementMethod(new ScrollingMovementMethod()); 

这是它的布局:

<EditText
        android:id="@+id/et1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:ems="10"
        android:scrollHorizontally="true"
        android:scrollbarAlwaysDrawHorizontalTrack="true"
        android:scrollbarFadeDuration="2000"
        android:scrollbarSize="80dp"
        android:scrollbarStyle="insideInset"
        android:scrollbarTrackHorizontal="@drawable/ic_drawer"
        android:scrollbars="horizontal"
        android:text="Hello"
        android:textSize="80sp" >
    </EditText>

再一次,这里提到的所有东西都不是必需的,我这样做是为了测试目的。你可以改变它。

为了证明代码可以正常工作,这里有两张图片。

Images http://imageshack.com/a/img850/3913/5c1i.png Images http://imageshack.com/a/img834/151/zg73.png

试试这个,看看是否有任何更新。

请说您看到了进展。同样,这可能不是一个完美的解决方案。任何建议都会有所帮助或任何其他答案将不胜感激。

已编辑:工作解决方案

我的布局: (activity_main.xml)

<RelativeLayout 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:background="#999999"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <HorizontalScrollView
        android:id="@+id/SCROLLER_ID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#333333"
        android:fillViewport="true"
        android:scrollbars="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/TEXT_STATUS_ID"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_gravity="center"
                android:layout_weight="1.0"
                android:text="Hello"
                android:textColor="#cccccc"
                android:textSize="35sp" />
        </LinearLayout>
    </HorizontalScrollView>

</RelativeLayout>

Java 代码: (MainActivity.java)

public class MainActivity extends Activity {

    TextView tv1;
    HorizontalScrollView mScrollView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1 = (TextView) findViewById(R.id.TEXT_STATUS_ID);
        mScrollView = (HorizontalScrollView) findViewById(R.id.SCROLLER_ID);
        // loadDoc();
        String s = "Nam ornare mattis nulla vitae vestibulum. "
                + "Mauris ac tellus diam. Nam dictum dolor augue,"
                + "quis hendrerit tortor aliquam et. Proin eu gravida augue."
                + "\n"
                + "Fusce lorem dolor, faucibus quis auctor eu, interdum at lorem."
                + "Suspendisse mi elit, suscipit semper mauris et, "
                + "interdum adipiscing lectus. Nulla laoreet arcu "
                + "\n"
                + "sollicitudin ultricies laoreet. Curabitur a bibendum nibh. "
                + "Etiam eget quam vitae sapien pellentesque facilisis. "
                + "Fusce nec enim vel mauris ultrices blandit ut sed purus."
                + " Vivamus ut sem nisi. Cras molestie ligula ac dui fermentum,"
                + " id placerat mauris rhoncus. Curabitur erat urna, ornare a placerat ac, "
                + "interdum nec diam. Donec sodales imperdiet nulla, ut ultricies elit.";
        tv1.setText(s);
        scrollToBottom();
    }

    private void scrollToBottom() {
        mScrollView.post(new Runnable() {
            public void run() {
                tv1.setHorizontallyScrolling(true);
                tv1.setMovementMethod(new ScrollingMovementMethod());
                mScrollView.smoothScrollTo(0, tv1.getBottom());
            }
        });
    }

}

现在它运行顺畅,单杠运行良好且响应迅速。试试看。效果很好..祝你好运.. :)

【讨论】:

  • “程序已停止”,这不是多行:/ 我希望将 scoller 设置为屏幕宽度,但其大小与最长行成正比。跨度>
  • 我知道.. 这就是问题所在。我也会尝试别的东西。但是有没有日志为什么应用程序停止了?这可能是图像的原因..不要使用太大的reso图像。
  • 它记录了:“E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException”——但我再说一遍,这并不是我真正想要的。不过,我真的很感谢你的努力!
  • 没问题..我在我的设备上试过这个,代码对我来说很好。也许这个问题的解决方案有所不同..将继续寻找答案..:D
  • 您有新的解决方案吗?
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多