gpt4 book ai didi

android - 以编程方式禁用 ScrollView?

转载 作者:IT老高 更新时间:2023-10-28 13:04:29 24 4
gpt4 key购买 nike

我想启用 ScrollView 并通过单击按钮禁用它。
禁用意味着如果 ScrollView 不存在,启用它会返回 ScrollView。

我想要这样,因为我有一个带有文本图像的画廊,并且在一个按钮上单击屏幕方向会发生变化,因此在横向中,文本会变得更大。而且我想要 ScrollView,这样图像就不会自行拉伸(stretch),并且文本变得不可读。

scrollview.Enabled=false/setVisibility(false) 什么也没做。

xml:

<ScrollView 
android:id="@+id/QuranGalleryScrollView"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<Gallery android:id="@+id/Gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal"></Gallery>
</ScrollView>

我不能使用 Visibility (gone),因为那样也会隐藏 Gallery,我想要的是隐藏 ScrollView 的效果。当有 ScrollView 时,Gallery 中的图像变得可滚动并且不适合屏幕,因此您必须滚动才能看到整个图像。我不想在单击按钮时禁用/启用它。

我试过了:

((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setHorizontalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setVerticalScrollBarEnabled(false);
((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setEnabled(false);

但画廊中的图像仍然是可滚动的并且不适合屏幕。有什么办法解决这个问题?

最佳答案

几点开始:

  1. 您不能禁用 ScrollView 的滚动。您需要扩展到 ScrollView 并覆盖 onTouchEvent 方法以在某些条件匹配时返回 false
  2. 无论是否在 ScrollView 中,Gallery 组件都会水平滚动 - ScrollView 仅提供垂直滚动(水平滚动需要 Horizo​​ntalScrollView)
  3. 您似乎说图像拉伸(stretch)本身存在问题-这与 ScrollView 无关,您可以使用 android:scaleType 属性 (XML) 更改 ImageView 的缩放方式或 setScaleType 方法 - 例如 ScaleType.CENTER 不会拉伸(stretch)您的图像并将其以原始大小居中

您可以修改 ScrollView 如下禁用滚动

class LockableScrollView extends ScrollView {

...

// true if we can scroll (not locked)
// false if we cannot scroll (locked)
private boolean mScrollable = true;

public void setScrollingEnabled(boolean enabled) {
mScrollable = enabled;
}

public boolean isScrollable() {
return mScrollable;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// if we can scroll pass the event to the superclass
return mScrollable && super.onTouchEvent(ev);
default:
return super.onTouchEvent(ev);
}
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// Don't do anything with intercepted touch events if
// we are not scrollable
return mScrollable && super.onInterceptTouchEvent(ev);
}

}

然后你会使用

<com.mypackagename.LockableScrollView 
android:id="@+id/QuranGalleryScrollView"
android:layout_height="fill_parent"
android:layout_width="fill_parent">

<Gallery android:id="@+id/Gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal">
</Gallery>

</com.mypackagename.LockableScrollView>

在您的 XML 文件中(只需将 ScrollView 更改为您的特殊 LockableScrollView)。

然后调用

((LockableScrollView)findViewById(R.id.QuranGalleryScrollView)).setScrollingEnabled(false);

禁用 View 的滚动。

我认为,为了达到您想要的结果(例如,画廊将保持可滚动使用上面的代码),我认为您不仅仅是禁用滚动的问题 - 我建议您对这三个组件中的每一个进行更多研究(Gallery、ScrollView、ImageView)来查看每个属性具有哪些属性以及它的行为方式。

关于android - 以编程方式禁用 ScrollView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5763304/

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