カテゴリーアーカイブ Android

村上 著者:村上

【Android】ActionBarのタイトルとボタンの色を白色に変更する

前回に引き続き、今回も Android の ActionBar についての記事です。
今回は、ActionBar の戻るボタンやタイトルの色を白色に変更する方法です。
ActionBar を濃い色で指定しているので、戻るボタンの色を白に変えたかったのですが、どこを直すのかがわかりにくかったのでまとめました。

参考にさせていただいた記事はこちらから。

android – Changing ActionBar Text and Button color when using Theme.AppCompat.Light – Stack Overflow
https://stackoverflow.com/questions/30720873/changing-actionbar-text-and-button-color-when-using-theme-appcompat-light

 

修正するのは、プロジェクトの res > values ディレクトリ内にある styles.xml ファイルです。
このファイル内にある AppTheme という名前のタグの parentTheme.AppCompat.Light.DarkActionBar に変更します。
具体的には下記のとおりです。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ......
</style>

変更はこれだけで、実機で確認したところ、きちんと白色に変更されていました。

他にも、タグ内に下記を追加するという方法もあるようでしたが、私の環境では上手くいきませんでした。

<item name="android:textColorPrimary">#fff</item>

そのため、他に影響が出ないようでしたら、parent を変更する方法をおすすめします。

 

以上、Android の ActionBar のボタン・タイトルの色を白色に変更する方法でした。
ご参考になれば幸いです。

  • この記事いいね! (0)
村上 著者:村上

【Android】setTitle()で指定したActionBarのTitleが表示されない時の対処法

凄く初歩的ですが、今後も同じミスをやらかしそうな予感がしたので、未来の自分のためにまとめ。
タイトル通り、.setTitle() を使って ActionBar の Title を指定したのに表示されなかった時の対処法です。

今回参考にさせていただいた記事はこちらから。

Android getActionBar().setTitle does not work – Stack Overflow
https://stackoverflow.com/questions/26045431/android-getactionbar-settitle-does-not-work

ちなみに5年前の投稿でしたので、結構古いです。
が、私の環境ではこちらの方法で解決可能でした。

 

対処法ですが、getSupportActionBar().setDisplayShowTitleEnabled(true); を追加するだけでした。
具体的には下記のとおりです。

getSupportActionBar().setDisplayShowTitleEnabled(true);  // この行を追加
getSupportActionBar().setTitle("[タイトル]");

実際に実機(Android 7.0 と 8.0)で試したところ、問題なくタイトルが表示されていました!
念のため、他の端末でも確認する予定ですが、多分問題はないはずです。

 

以上、Android の ActionBar のタイトルが表示されない時の対処法でした。
ご参考になれば幸いです。

  • この記事いいね! (0)
村上 著者:村上

【Android】「Only fullscreen opaque activities can request orientation」エラーでアプリがクラッシュする時の対処法

タイトル通り、今回は Android で発生したエラーの対処法についてです。
以前に開発したアプリの修正を行っていたところ、確か現在の Activity から別の ActivityIntent を使って遷移した際に「java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation」というエラーと共にアプリが強制終了しました。

参考にさせていただいた記事はこちらから。

java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation – Qiita
https://qiita.com/oxsoft/items/042aaa6e9c7ae828e967

全く同じ状況だったので、大変参考になりました…!

 

参考サイトによると、クラッシュ原因は下記の 4つを満たすと発生するそうなので、どれか一つでも対処すればOKです。

  1. Android 8.0 の端末
  2. targetSdkVersion が 27 以上
  3. 背景を透過にしている
  4. 画面の向きを固定している

私は 4番目の「画面の向きを固定している」を変更することで対応しました。
…というか、これを変更する以外の選択肢がないのでは…?

画面の向きを固定しない方法については、下記のサイトを参考にさせていただきました。

Y.A.M の 雑記帳: Android 画面の向きを設定
http://y-anz-m.blogspot.com/2010/09/android.html

設定方法は AndroidManifest.xml 内にある、画面向きを固定しないアクティビティの android:screenOrientationbehind に設定するだけです。
サンプルコードは下記のとおりです。

<activity
    android:name=".[アクティビティ名]"
    android:label="@string/app_name"
    android:screenOrientation="behind" />

対処方法としては以上です。
再度アプリをビルド・実行したところ、クラッシュすることなく問題なく動作しました!

 

以上、「java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation」エラーでアプリがクラッシュする時の対処法でした。
ご参考になれば幸いです。

  • この記事いいね! (0)
takahashi 著者:takahashi

Pixel 3aをAndroid 10にしてみた

以前Android 10リリース直後にエミュレータを使用したレビュー記事を書きましたが、先日手元のPixel 3aもAndroid 10にアップグレードしてみました。

今回は、エミュレータでは気づかなかった変更点を中心に取り上げたいと思います。

・通知バーの上部に電池が切れるまでの推定時間が表示されるようになった

いままでは残量の%しが表示されていませんでしたが、Android10 からは通知領域を広げた際に電池が使用できる時間を推定し表示してくれるようになりました。

お出かけ中に充電スポットを探す目安になるかもしれませんね。

・ナビゲーションバーの変更は実端末でも可能になったが”ジェスチャ”は対応ホームアプリを利用中のみ対応

Android 10から利用できるようになったナビゲーションボタンの変更機能ですが、実機のPixel 3aでも利用可能でした。

ただし、対応しているホームアプリを利用していない場合は戻るボタンの無い”ジェスチャ”は選択できません。

僕の場合はMicrosoft Launcherを使用していますが、現時点ではジェスチャナビゲーションは選択できないようです。

なお、3ボタンなびげージョンは問題なく利用できました。

・電話録音アプリが動作不能に

電話での聞き落しなどを防ぐために通話録音アプリ”ACR”を使用していたのですが、Android 10にアップグレードしたところ、一切音声が入らなくなってしまいました。

Google本社のある米国では通話の録音が禁止されている、という話もあるようなのですが、日本仕様のPixel 3aでも同様の制限が入っているのは少し納得がいきません。

自己防衛のために通話録音が必要な場合もあるので、個人的にはこの方針は考え直してほしいところですね…

現在Android 9 を使用中の方はご注意ください。

・CPU使用率にスパイク(瞬間的な使用率上昇)が頻発する

CPU使用率をモニタするアプリで端末の負荷を監視しているのですが、(僕の端末だけの症状の可能性もありますが)数秒に一回CPU使用率が100%になる現象が続いています。

もしかするとOSアップグレード直後でバックグラウンドで何かが動いているのかもしれませんが、キャッシュを削除しても、何度再起動しても改善しないのでちょっと気になります。

ただ、いまのところ動作自体が重くなったりといった症状はないので、とりあえずは無視します。

他にもロック画面にロック状態を示すカギアイコンが上部に大きく表示されるなど、Pixel 4を意識した変更もところどころ見かけられました。

個人的にはナビゲーションボタンが自分の好きなものに変更できるようになったのが一番大きな変更点かなと思います。

また一段と改良されたAndroidを楽しみたいPixel 3aユーザーの皆さんは是非アップグレードしてみてはいかがでしょうか。

  • この記事いいね! (0)
asaba 著者:asaba

【cordova】Cannot add task ‘:processDebugGoogleServices’の対処法

gradleのバージョンを5.4.1にしてビルドをすると

cordova-plugin-firebaseとcordova-plugin-fcmが競り合いを起こして

Cannot add task ‘:processDebugGoogleServices’のエラーとなります。

 

解決方法は

 

①cordova-plugin-firebaseとcordova-plugin-fcmをそれぞれcordova plugin rm 〇〇する

②cordova platforms rm android

③cordova platforms add android@6.4.0をadd

④cordova-plugin-firebaseとcordova-plugin-fcmをそれぞれcordova plugin add 〇〇する

⑤ビルド後gradleの変更(android Gradle Plugin Vesion 3.0.1 Gradle Version 4.1)

⑥gradle-wrapper.propertiesの6行目 gradle-4.1-all.zipに変更

⑦ビルドでエラーが出なければ成功

 

cordova platforms add androidの際は、何も指定しないでaddを

すると、android6.3.0がインストールされますが、このバージョンだと

cordovaのライブラリで一部競り合いが起こるものが入っているので

避けた方が良いです。代わりに一つ上の6.4.0を使うことで

ライブラリ系のトラブルを減らすことができます。

  • この記事いいね! (0)
asaba 著者:asaba

【androidjava】javaでhtmlタグを操作する

javaでは、Html.fromHtml(何かの変数)メソッドを使うことでhtmlタグでTextView

を操作することが出来ます。

部分的に強調したいところがあったりTextViewをリンクとして

使いたくなった時に色を変えたい時が主な用途です。

まず、sring.xmlで文字を追加します。

 

<pre><string name="sample" translatable="false">※[&lt;font color=\"navy\"&gt;%s&lt;/font&gt;]</string></pre>

 

stringタグを作った後に色を変えたい箇所を&ltと&gtで囲みます。囲まれている

$sが今回表示したい文字になります。

 

color=\”何かの色\の形式で好きな色に変えることができます。

 

続いてxml↓

 

<pre><TextView
    android:id="@+id/text_sample"
    android:layout_width="150sp"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginEnd="20dp"
    android:layout_marginTop="110dp"
    android:textColor="#444444"
    android:background="@drawable/selector"
    android:textSize="16sp"
    android:textStyle="bold" /></pre>

 

後にコード上で文字列を入れるのでテキストには何も設定しません。

ですがこれだけではこのまま表示されてしまうので、次にMainActivityに

実際に文字を入れていきます。

 

まず、String.formatでstring.xmlから文字を抽出しています。第一引数

が形式、第二引数が入れたい文字となっております。

次に、入れたい文字列ですが、ここではhogehogeが先ほどのstring.xmlの%sに入っていきます。

 

最後にsetTextの中でHtml.fromHtml(text)でhtmlタグを使って

 


@InjectView(R.id.text_sample)
TextView sampleText;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
ButterKnife.inject(this);

String text = String.format(getText(R.string.sample).toString(), "hogehoge");
sampleText.setText(Html.fromHtml(text));
}

 

string.xml内の文字列を翻訳して色が変われば無事終了となります。簡単

なコード数行で済むのでhtml経験者ならもっと自在に扱えそう・・・・。

でもcssなしでここまでカスタマイズできるなら上等かなぁと思います。

  • この記事いいね! (0)
asaba 著者:asaba

【androidjava】Bitmap初期化失敗した時に確認すること

googlemapを使う時にマーカーをカスタマイズしたい時に

bitmapを使うのですが、googlemapと併用する際は

始動時のonMapReadyの中で処理をする必要があります。

 

これは、Google Map の用意が出来た時に初めて初期化できる状態に

なるからです。

 

なのでonCreate内でbitmapを初期化

しようとするとエラー「IBitmapDescriptorFactory is not initialized」

で初期化が失敗してしまいます。

 

</pre>
@Override
public void onMapReady(GoogleMap googleMap) {

//この中でforを使いたい場合

BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(myImageList[i]);

ClusterModel offsetItem = new ClusterModel(title[i],url[i], icon);

}
<pre>

 

なんでもフィールドやonCreate内で初期化するのも

よくないということですね。

  • この記事いいね! (0)
takahashi 著者:takahashi

SONY Xperia 1 のアップグレード・SIMフリー版がSONYストアで発売!

少し前に発表された新型のSONY製スマートフォン、”Xperia 1″ですが、動画のプロが使用する、正確な色が出力できるディスプレイと同等の色表示ができる機能を持っていたり、細かい操作が可能な専用のビデオカメラアプリが入っていたりと、かなり本格的な機能が入っていて一部で話題になっていました。

そんなXperia 1 ですが、先日、機能がアップグレードされ、SIMフリー端末となった後継(?)機種のXperia 1 Professional Editionが発売されました。

ソニー、プロ映像制作/写真家/ゲーマー向けスマホ「Xperia 1 Professional Edition」-PC Watch

このProfessional Editionと無印の違いとして、

・工場出荷時のディスプレイの個体差補正

・ デジタル一眼カメラ「α」シリーズとの連携機能をもつ「Imaging Edge Mobile」、プロが撮影画像を即時に納品できる「Transfer & Tagging add-on」のプリインストール

USB Type-C経由での有線LAN接続への対応

が追加された点で、よりプロが実用できるようなチューニングが施されたような形です。

SIMフリー版として販売されたことの代償として、グローバルモデルベースとなっているためにFelicaやワンセグなどの日本独自機能は省かれているとのことですが、日本ではXperiaシリーズ自体がほとんどキャリアを通してでしか入手できないことがほとんどだったので、XperiaのフラグシップモデルがSIMフリー版として単独で入手できるのは非常にうれしいポイントだと思います。

ただ、とことん性能が追及されている分、お値段が一般的なノートPCと同じぐらいの設定になっているのがかなりつらいところです。

最近動画専用カメラがちょっとほしいなーと思っていたので、Xperia 1はまさに選択肢になりうる端末ではあるのですが…これは悩ましいですね(;´∀`)

Xperia 1 Professional Edition – SONY

  • この記事いいね! (0)
asaba 著者:asaba

【android・googlemap】DefaultClusterRendererをオーバーライドしたカスタマイズ法

DefaultClusterRendererを継承したクラスを作ってオーバーライドして

値を変えることで自分好みのマップを作ることができます。

例えば、addmarkerを使わずにsetInfoWindowAdapterと併用して

マーカーをカスタマイズしたい時は、DefaultClusterRendererを継承した

クラスの中にonBeforeClusterItemRenderedをオーバーライドした

メソッドを書くことでマーカーのアイコンを変更することができます。

 

マーカーを変更したい時はこちらも

お忘れなく。↓

</pre>
public class ClusterModel implements ClusterItem {
private LatLng mPosition;
private String mTitle;
private String mSnippet;
private BitmapDescriptor mIcon;

//一番最後にBitmapDescriptorを追加

public ClusterModel(double lat, double lng, String title, String snippet,BitmapDescriptor icon) {
mPosition = new LatLng(lat, lng);
mTitle = title;
mSnippet = snippet;
mIcon = icon;
}

@Override
public LatLng getPosition() {
return mPosition;
}

@Override
public String getTitle() {
return mTitle;
}

@Override
public String getSnippet() {
return mSnippet;
}
public BitmapDescriptor getIcon() {
return mIcon;
}
}
<pre>

 

こちらはメインアクティビティ↓

 

</pre>
@Override
public void onMapReady(GoogleMap googleMap) {
mMap= googleMap;
//クラスターインスタンス化
mClusterManager = new ClusterManager<ClusterModel>(this, mMap);
mClusterManager.setRenderer(new MarkerRenderer(this, mMap, mClusterManager));
mClusterManager.setOnClusterClickListener(this);
mMap.setOnCameraIdleListener(mClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);
for(int i =0; i < points.size(); i++) {
BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(myImageList[i]);
ClusterModel offsetItem = new ClusterModel(pointX[i], pointY[i],title[i],url[i], icon);
mClusterManager.addItem(offsetItem);
}
}
<pre>

 

アクティビティ内に以下のクラスを追加↓

 

</pre>
private class MarkerRenderer extends DefaultClusterRenderer<ClusterModel>{
public MarkerRenderer(Context context, GoogleMap map, ClusterManager<ClusterModel> clusterManager) {
super(context, map, clusterManager);
}
@Override
protected int getColor(int clusterSize) {
return Color.rgb(0, 255, 255);
}
@Override
public void onBeforeClusterItemRendered(ClusterModel markerItem, MarkerOptions markerOptions) {
if (markerItem.getIcon() != null) {
markerOptions.icon(markerItem.getIcon());
}
markerOptions.visible(true);
}
}
<pre>

 

onBeforeClusterItemRenderedは、アイコンが出る前にrenderする(アイコンの更新

や動きを決める)役割を持ったメソッドです。

つまり、アイコンの見た目を変えたい場合はこちらをオーバーライドして

設置しておけば画像を受け取って変更してくれるという訳です。

 

addmarkerは同期してマーカーがrenderされるので遅い&容量食らうのでメモリ不足

になりがちですが、ClusterManagerと組み合わせて非同期で

renderすることで、マーカー・クラスターが増えても高速でrender

をしてくれるので多少複雑に作ってもこっちを作った方が

よさそうです。

  • この記事いいね! (0)
asaba 著者:asaba

【androidjava】Linkifyで簡単にテキストリンクを作る

androidでテキストとリンクの混合テキストを作る方法の一つに

Linkifyライブラリを使う方法があります。

 

こちらがサンプル

 

</pre>
<pre>TextView text = findById(this, R.id.sample);
text.setText(R.string.sampleText);
Linkify.addLinks(text, Linkify.ALL);

第一引数にリンクを付けたいテキスト、第二引数に

リンクとして出したい形式を渡します。

 

第二引数の形式に合ったテキストを第一引数の中から

あぶりだして該当したテキストをリンクに変換する

と覚えましょう。簡素ですが覚えましょう。

 

ここではhttps://の形式でリンクを作りたいのでallとしています。

他にも電話番号をあぶりだすPHONE_NUMBERSや住所をリンク

にできるmapaddress(こちらはすでに非推奨)がありますが、

allは全て対象に含んでくれるのでリンクを作りたいと

思ったら迷わずこれでいいと思います。

 

  • この記事いいね! (0)