相关疑难解决方法(0)

ScrollView .scrollTo无法正常工作?在旋转时保存ScrollView位置

好的..我必须在这里忽略一些非常简单的东西,但我想我正在尝试做一些相当基本的事情.只需保留ScrollView的滚动条位置以改变方向...

这是我的onSaveInstanceState和onRestoreInstanceState的代码.sView是ScrollView布局的容器.在我的滚动视图中是一个带有大量textview的线性布局.

    @Override 
public void onSaveInstanceState(Bundle outState) 
{
    //---save whatever you need to persist—

    outState.putInt("sViewX",sView.getScrollX());
    outState.putInt("sViewY",sView.getScrollY());

super.onSaveInstanceState(outState);

}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) 
{
    super.onRestoreInstanceState(savedInstanceState);

    sViewX = savedInstanceState.getInt("sViewX");   
    sViewY = savedInstanceState.getInt("sViewY");

    sView.scrollTo(sViewX, sViewY);

}
Run Code Online (Sandbox Code Playgroud)

如果我在恢复时使用sViewX和sViewY的值设置Toast,则值保持正确.

编辑:我刚尝试做一个sView.scrollTo(0,150); 在我的onCreate ..只是为了看看是否会以150px的速度打开活动,但事实并非如此.我认为我的问题与.scrollTo方法有关.

android

44
推荐指数
1
解决办法
3万
查看次数

最佳方式:在ScrollView中保存并恢复TextView位置

我想要的是,在设备更改方向时,屏幕中的顶线在纵向时仍然是横向屏幕上的顶行.反之亦然.

由于纵向和横向之间的屏幕宽度可能不同,因此文本的线宽(也就是宽度TextView和宽度ScrollView)会有所不同.因此,在不同的屏幕配置(纵向与横向,大与小)中,换行将有所不同.在不同的情况下,换行符将处于不同的位置.

有三种不太完美的解决方案供您参考.还解释了它们的缺点.


首先,最基本的方法:

(1)仅将y偏移存储在像素中

请查看:http://eliasbland.wordpress.com/2011/07/28/how-to-save-the-position-of-a-scrollview-when-the-orientation-changes-in-android/

为什么这不是那么完美:

在肖像中,线条被包裹.

Line_1_Word_A Line_1_Word_B Line_1_Word_C
Line_1_Word_D
Line_2_Word_A Line_2_Word_B Line_2_Word_C
Line_2_Word_D
Line_3_Word_A Line_3_Word_B Line_3_Word_C
Line_3_Word_D
Run Code Online (Sandbox Code Playgroud)

在横向中,线条不会被包裹.

Line_1_Word_A Line_1_Word_B Line_1_Word_C Line_1_Word_D
Line_2_Word_A Line_2_Word_B Line_2_Word_C Line_2_Word_D
Line_3_Word_A Line_3_Word_B Line_3_Word_C Line_3_Word_D
Run Code Online (Sandbox Code Playgroud)

想象一下Line_2_Word_A在保存时在Portrait中读取(在屏幕顶部).当更改为横向时,它将显示Line_3_Word_A(在屏幕顶部).(因为顶部有两行偏移的像素.)


然后我想出一个方法,

(2)通过保存滚动百分比

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    final ScrollView scrollView = (ScrollView) findViewById(R.id.Trial_C_ScrollViewContainer);
    outState.putFloatArray(ScrollViewContainerScrollPercentage,
            new float[]{
            (float) scrollView.getScrollX()/scrollView.getChildAt(0).getWidth(),
            (float) scrollView.getScrollY()/scrollView.getChildAt(0).getHeight() });
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud)

android textview android-layout android-scrollview android-orientation

15
推荐指数
1
解决办法
5642
查看次数

根据长按位置动态修改EditText中的上下文/长按菜单

我正在使用EditText小部件,并且想要修改用户长按视图时显示的上下文菜单。我遇到的问题是,我需要知道长按文本中的字符位置,以便可以确定需要添加到上下文菜单中的内容。基类正在执行此操作,因为菜单中的一项选择是“将“ word_clicked_on”添加到词典中”。在文本中设置ClickableSpans似乎不是一个解决方案,因为它消耗了click事件,从而无法在范围内移动编辑光标。

android

4
推荐指数
1
解决办法
2181
查看次数

将 TextView 滚动到文本位置

我想滚动我的 TextView 以使文本中的特定位置可见。我怎样才能做到这一点?我尝试过 BringPointIntoView (int offset) 但没有成功。

源代码:

public class TextScrollActivity extends Activity {
  public void onCreate (final Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    final int position = 500;
    final TextView textView = new TextView (this);
    final ScrollView scrollView = new ScrollView (this);
    scrollView.addView (textView);
    Button button = new Button (this);
    button.setText ("Scroll to " + position);
    LinearLayout layout = new LinearLayout (this);
    layout.setOrientation (LinearLayout.VERTICAL);
    layout.addView (scrollView,
    new LayoutParams (LayoutParams.FILL_PARENT, 200));
    layout.addView (button, new LayoutParams (LayoutParams.FILL_PARENT,
    LayoutParams.WRAP_CONTENT));
    StringBuilder builder = new …
Run Code Online (Sandbox Code Playgroud)

java android scroll position textview

3
推荐指数
1
解决办法
5453
查看次数