0

私は非常に単純なアンドロイドアプリを書いています。ユーザーが表面に触れて指を動かすと、指の下に絵が描かれます。指を上げると止まります。

指を離すとアクションバーが非表示になり、指を離すと再び表示されるようにします。

ActionBar がオーバーレイされます。ビューの onTouchEvent で ActionBar.hide() と .show() を使用するとうまくいくと思いましたが、いくつか問題が発生しました。

私はいくつかのことを試しました。最初に、Activity で作成された ActionBar をビューに渡そうとしましたが、ActionBar が「取得」される前にビューを作成する必要があるため、これは機能しませんでした。そのため、null 値を渡すだけでした。

次に、ビューから呼び出すことができる静的な ActionBar を作成しようとしましたが、次のエラーが表示されます:「ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。」</p>

これを回避する方法を知っている人はいますか?

4

1 に答える 1

2

jfeinstein10のスライディングメニューライブラリの一部である例の1つを見てください

その中で、BirdActivity.javaで、2秒後にがどのようにActionBar表示および非表示になるかを確認できます。当然、コードを自分で調整する必要があります。しかし、これで始められるはずです。

番号53-58からのコードの抜粋:

imageView.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        getSupportActionBar().show();
        hideActionBarDelayed(mHandler);
    }
});

行番号80-86hideActionBarDelayed()から:

private void hideActionBarDelayed(Handler handler) {
    handler.postDelayed(new Runnable() {
        public void run() {
            getSupportActionBar().hide();
        }
    }, 2000);
}

アップデート

コードが不足しているため、問題のほとんどが想定されています。OPからのデータが不足しているというだけの理由で間違っている可能性があります。そうは言っても、 「ビュー階層を作成した元のスレッドだけがそのビューに触れることができる」と整理すると。問題はそれを修正します、おそらくこれはあなたのためにそれをするかもしれません:

Runnable run = new Runnable() {

    @Override
    public void run() {
            // RUN YOUR CODE TO HIDE / SHOW THE ACTIONBAR HERE      
    }
}; YOUR_ACTIVITY.this.runOnUiThread(run); // REPLACE WITH getActivity().runOnUiThread(run); IF THIS IS A FRAGMENT

注:この例では、問題のアクティビティはActionBarSherlockを使用して拡張SherlockActivityしているため、を使用していますgetSupportActionBar()。ABSを使用していない場合getActionBar()は、前者の代わりに使用する必要があります。

于 2013-01-18T03:15:33.607 に答える