好的..我必须在这里忽略一些非常简单的东西,但我想我正在尝试做一些相当基本的事情.只需保留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方法有关.
我想要的是,在设备更改方向时,屏幕中的顶线在纵向时仍然是横向屏幕上的顶行.反之亦然.
由于纵向和横向之间的屏幕宽度可能不同,因此文本的线宽(也就是宽度TextView和宽度ScrollView)会有所不同.因此,在不同的屏幕配置(纵向与横向,大与小)中,换行将有所不同.在不同的情况下,换行符将处于不同的位置.
有三种不太完美的解决方案供您参考.还解释了它们的缺点.
首先,最基本的方法:
请查看: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(在屏幕顶部).(因为顶部有两行偏移的像素.)
然后我想出一个方法,
@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
我正在使用EditText小部件,并且想要修改用户长按视图时显示的上下文菜单。我遇到的问题是,我需要知道长按文本中的字符位置,以便可以确定需要添加到上下文菜单中的内容。基类正在执行此操作,因为菜单中的一项选择是“将“ word_clicked_on”添加到词典中”。在文本中设置ClickableSpans似乎不是一个解决方案,因为它消耗了click事件,从而无法在范围内移动编辑光标。
我想滚动我的 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)