[解決済み] ScrollViewをプログラムで無効にする?
質問
ScrollViewを有効にし、ボタンクリックで無効にしたいのですが、どうすればよいですか?
DisableはScrollViewがなかった場合のような意味で、enableはScrollViewを戻すという意味です。
私はテキスト画像でギャラリーがあり、ボタンをクリックすると画面の向きが変わり、横向きではテキストが大きくなるので、それが欲しいです。そして、画像が勝手に伸びてテキストが読めなくならないように、ScrollViewが欲しいのです。
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);
しかし、まだギャラリーの画像はスクロール可能で、画面に収まりません。これに対する解決策は何でしょうか?
どのように解決するのですか?
まず、いくつかのポイントがあります。
-
ScrollViewのスクロールを無効化することはできません。ScrollViewを拡張して、その上で
onTouchEvent
メソッドをオーバーライドしてfalse
を返します。 - ギャラリーコンポーネントは、それがScrollView内にあるかどうかに関係なく水平にスクロールします - ScrollViewは垂直スクロールのみを提供します(水平スクロールのためにHorizontalScrollViewが必要です)。
-
画像の伸縮に問題があるようですが、これは ScrollView とは関係なく、ImageView の伸縮の仕方は
android:scaleType
プロパティ (XML) またはsetScaleType
メソッド - 例えばScaleType.CENTER
は画像を伸ばさず、元の大きさのまま中央に配置します。
あなたは
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);
でビューのスクロールを無効にします。
私は、あなたが望む結果を得るためには、スクロールを無効にするという問題以上のものがあると思います(例えば、上記のコードではギャラリーはスクロール可能なままです) - 私は、3つのコンポーネント(ギャラリー、ScrollView、ImageView)それぞれについて、それぞれがどんなプロパティを持っていてどう動作するかをもう少し調査することをお勧めします。
関連
-
[解決済み] ScrollView 内の RecyclerView が動作しない。
-
[解決済み] ViewPagerで指のスワイプによるページングを無効にし、プログラムによるスワイプはできるようにするにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidのランドスケープモードを無効にする方法を教えてください。
-
[解決済み] ListViewをScrollViewの中に入れても、崩れないようにするにはどうしたらいいですか?
-
[解決済み】Android。ScrollViewが強制的に下に表示される
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] プログラム的に電話をかけるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?