2015/04/20

【android】ScrollViewで縦横斜めにスクロール

androidで未だに、縦横斜めスクロールするViewって未だに実装されていない?
軽く調べたけど、
HorizontalScrollView(横)とScrollView(縦)を利用すれば出来そうだけど、
斜めには出来ないとか書いてあった。
未だに、自前で実装する必要があるのかな?
そもそも需要が無いから実装されていないのか・・・。

日曜プログラムでもしてみて、できたら公開でもしてみようか・・・。

構造としては、
自作したScrollViewの子の要素にViewGroupを一つ入れて、
動くようにする。既存のScrollViewと同じような感覚のものでも・・・。

頭のなかでは、まとまっているのだが、後はコードに落としこむだけ。
って言うか、
ScrollView に対して、HorizontalScrollView をmergeすればよくね?
と思っている。

ScrollViewとHorizontalScrollViewはOpen Sourceなので公開されているから、
参考に出来そう。

もし、需要があれば作成したいと思います。
アクセス数や+1によって検討かな。

Git hubのaccountもあるし、そっち側で公開でもいいかな。


2026/03/04 今更ですが、実際に書いてみた。

2015/04/17

【Android】でPDF作成と表示:PdfDocumentとPdfRenderer編 (Java版)

今更になってしまいますが、

android API レベル 19 からPDFの操作が可能になっていたようです。

インポートするのは 「android.graphics.pdf」になります。

この中にある、PdfDocument やPdfRenderer などのクラスを利用すれば、

生成や表示関連ができそうです。

iOSは大分前からあったので、よかったのですが、

今までandroidは別途ライブラリを利用して、表示したり、生成していました。

APIレベルが19以上なので、OS 4.4 以上となりますが、

2016年頃には4.4または、5.X以上が主流となっているはずなので、

覚えていた方が良いかと思います。

動作を確かめたわけではないですが、

妄想で作成するコード書いてみた。

PdfDocument document = new PdfDocument();
PageInfo pageInfo = new PageInfo.Builder(100, 100, 1).create();
Page page = document.startPage(pageInfo);
Canvas c = page.getCanvas();
// 好きな内容を書く
c.drawText("aaa", 0, 3, 0, 0, new Paint());
document.finishPage(page);
File file = new File("保存先");
OutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream(file));
document.writeTo(out);
document.close();

} catch (IOException e) {
e.printStackTrace();
}


こんな感じでいけるかな?
2024/06/10 追記
もう少し見やすいように書いてみた

public class PdfCreator {

    public static void createPdf(String filePath) {
        // PDFドキュメントの作成
        PdfDocument document = new PdfDocument();
        // ページ情報の設定 (幅: 100, 高さ: 100, ページ番号: 1)
        PageInfo pageInfo = new PageInfo.Builder(100, 100, 1).create();
        // ページの開始
        Page page = document.startPage(pageInfo);
        // キャンバスの取得
        Canvas canvas = page.getCanvas();
        // ペイントの設定
        Paint paint = new Paint();
        // テキストの描画 (x座標: 0, y座標: 3)
        canvas.drawText("aaa", 0, 3, paint);
        // ページの終了
        document.finishPage(page);

        // ファイルの保存
        File file = new File(filePath);
        try (OutputStream out = new BufferedOutputStream(new FileOutputStream(file))) {
            document.writeTo(out);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // ドキュメントのクローズ
            document.close();
        }
    }
}

2015/04/13

【iOS】UIWebViewからWKWebViewに簡単に移行はできるのか?

iOSの開発をおこなっていると、
多々webviewを利用する機会があると思います。
某ソシャゲーとかは、側やメニュー等はネイティブで作成して、
メインのコンテンツ部分はhtmlで表示していたりしていますよね。
最近iOS8にUIWebViewでは無く、WKWebViewなる物が実装されたとの事。

これは!と思い。

WKWebViewを見る限りだと、内部の表示する為のエンジンが違うので、
JSの実行速度とかが高性能になっているとか、かなり良い事をいっぱい書いて有りました。

今後はiOS7までは、UIWebViewで
iOS8からはWKWebViewに変更した処理でやればより、
快適に動くのではないかと思うんです。

しかしながら、ネット上を調べると、単純に置き換えるだけでは利用が出来ないとの事。
そもそも、XIBやStoryboardには対応していないらしく、コードでしっかりと記載しないと行けなかったり。

ページ内のlink関連で <a> tag関連の処理が変わっていたり、
tmp内のローカルファイルのpathを参照する際に
file:/// では読み込めない用な記載を見かけました。

2016/12/21 追記
※ tmpに保存しないとhtml読み込めないようです。
※ <a>に _blankが設定されているとエラーが返って来るようです。


ですので、単純に置き換えだけでなく、コードの修正やヘタをすればhtml側の修正しないと行けないかもしれません。

まぁ、実際にコードを書いて検証したのではないので、なんとも言えませんが、
今後、対応することになったら、感想とかを書いて見ようかと思います。

iOS 10 ぐらいには、UIWebViewがduplicateとかになるのかな?


2018/07/13 追記

結構コンスタンスにアクセスしているようなのですが、この記事は有力なのだろうか・・・。


2019/05/20 追記
もう、UIWebViewがduplicate  になってますね〜。
皆さんWKWebViewでやるの必須ですよ。


2019/10/01 追記
iOS のサポートが 12まで表記ですね。
そろそろ、やばいですよ。

2019/10/04 追記
Xcode 11 でビルドするとWKWebViewが動かない事があります。
表示はできるが遷移ができなくなっている。
Xcode 10 だと大丈夫だったのに。。。
Security関連で、ローカルファイルの参照ができなくなったと思われます。
2020年04月 以降は、Xcode 11 必須だしどうしたものか・・・。

2020/04/15 追記
Appleから Xcode 11 必須は  6月へ延期になったようです。


2020/05/15 追記
最近のXcode10 ?以上は Storyboard 上からでもWKWebView 設置できるようです。

2020/09/15 追記
公開済みのアプリでUIWebViewが含まれているアプリの審査(更新)可能なのは
12月までのようです。それ以降はリジェクト
新規のアプリはすでに受付停止

あえて言う、UIWebViewはもう使うな。WKWebViewを使うんだ。





2015/04/09

【android】androidのOS別のやつです。


公式から4月に公開されれたようです。androidのOS別のやつです。

VersionCodenameAPIDistribution
2.2Froyo80.4%
2.3.3 -
2.3.7
Gingerbread106.4%
4.0.3 -
4.0.4
Ice Cream Sandwich155.7%
4.1.xJelly Bean1616.5%
4.2.x1718.6%
4.3185.6%
4.4KitKat1941.4%
5.0Lollipop215.0%
5.1220.4%
もう、4.0.3も切り捨ててもいいかなぁ。


2015/03/29

アンケートに答えて本当にもらえるかな?

アプリからシェアしてみた。
簡単なアンケートに答えて Google Play クレジットを獲得しましょう。
今すぐ Google Opinion Rewards をダウンロード: https://play.google.com/store/apps/details?id=com.google.android.apps.paidtasks



追記、
30分後にアンケートが来て、回答したら。
本当に100円のクレジットがもらえました。

2015/03/17

妖怪リモコン隠し

家のリモコンが二日間見当たらない…。
何処にいったのやら…。

2015/03/12

【android】androidのOS別 5月

5月2日にgoogle公式で発表されてるandroid OS毎のやつです。

開発対象はもう4.1以降でよいかなぁ。
いっその事ある程度先をみこして、4.4以上以上でも良いかも。
国別で出して欲しいんだけど、googleさん発表してくれないかなぁ。
データはあるかと思うんだけど、発表できない理由があるかもしれませんね。

VersionCodenameAPIDistribution
2.2Froyo80.4%
2.3.3 -
2.3.7
Gingerbread106.9%
4.0.3 -
4.0.4
Ice Cream Sandwich155.9%
4.1.xJelly Bean1617.3%
4.2.x1719.4%
4.3185.9%
4.4KitKat1940.9%
5.0Lollipop213.3%
http://developer.android.com/about/dashboards/index.html

2015/01/20

【android】android studio でのリリースビルドのやり方(メモ)

題名の通りです。

・Build > Generate Signed APK.

詳しくは公式に載ってました。
http://developer.android.com/tools/publishing/app-signing.html#studio

以上。

【android】スプラッシュスクリーンの画面作成どうやってます?

androidのアプリを開発する際に
ほとんどスプラッシュ画面が有るのですが、
iOSはペラ一枚の画像を指定(今はもっと高機能になってる?)すれば良いですが、
androidでは未だに自前で実装しないと行けない。(ですよね?)

よくあるパターンとしては、
スプラッシュ用のActivityを用意して、
遅延実行させて次のActivityへ遷移させる

googleの思想として

「スプラッシュなんてイラネ!!」

とか、なんでしょうか。


2014/11/10

【iOS】mapkitのmemo


ハマったのでmemo iOS7 iOS8 で確認

吹き出しタップ時のEvent
(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 

ピンタップ時のEvent
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view


標準の吹き出しをOKにする。
annotationView.canShowCallout = YES;

吹き出しの中のButtonの設定(これがないと吹き出しのタップEventが拾えない?)
UIButton *bt = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annotationView.rightCalloutAccessoryView = bt;

Buttonのアイコンなら変更は可能。
[bt setImage:[UIImage imageNamed:@”アイコンの名前”] forState:UIControlStateNormal];

2014/10/30

【android】PropertyAnimation OS 3.0以上

android で今までアニメーションって、Viewアニメーションを使っていたのだが

3.0以上から新しいアニメーション方法が実装されていたらしい。

しかも、アニメーション後にちゃんと見た目だけじゃなく。Viewの実態も動いてくれるとのこと。

昔はよく、アニメーションをして止まったら、指定の位置までViewのXY(Marginとか)を動かしていたっけ。。。

リファレンス。
http://developer.android.com/guide/topics/graphics/prop-animation.html

ちゃんとXMLでも定義が出来そう。

あれでもさ、LayoutGroupの影響は受けないのかな?

RelativeLayoutとかで相対指定していた場合の挙動はどうなるんだろ。

座標系も、LayoutGroupからの位置なので、Displayの絶対座標からなのか、

検証しないとなぁ。

ああ、あとアニメーション中(移動中)のViewはクリッカブルにできるのかな?

いっぱい確認したいことがあるや。

下記の用な形で行ける
mView.animate().x(100f).y(100f);


下記を駆使していけば良いや。
AnimatorSet
ValueAnimator
ObjectAnimator
TypeEvaluator

2014/10/09

【iOS】キーボードを開く(メモ)

メモ

iOS キーボードをプログラムから開く
[textView becomeFirstResponder];

2014/08/28

Android WebView ズームコントロール非表示【2026年最新実装】

WebView でピンチイン・ピンチアウトは有効にしたいけど、ズームボタンは邪魔。2014年の古い記事では廃止済み API が紹介されていた。2026年の正しい実装方法をまとめておく。

どちらのフレームワークを使うかで実装が異なる。


2026年:2つの実装パス

パス A:推奨Jetpack Compose を使う場合

@Composable
fun WebViewScreen() {
    AndroidView(
        factory = { context ->
            WebView(context).apply {
                settings.apply {
                    javaScriptEnabled = true
                    setSupportZoom(true)
                    setBuiltInZoomControls(true)
                    setDisplayZoomControls(false)  // ← ズームボタン非表示
                    domStorageEnabled = true
                    databaseEnabled = true
                }
                webViewClient = WebViewClient()
            }
        },
        modifier = Modifier.fillMaxSize(),
        update = { webView ->
            webView.loadUrl("https://example.com")
        }
    )
}
✅ メリット:
  • 最新フレームワーク
  • 状態管理が容易
  • テストしやすい

パス B:レガシー従来の View 系を使う場合

ステップ 1:XML レイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

ステップ 2:Activity/Fragment で設定

class WebViewActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_webview)

        val webview = findViewById<WebView>(R.id.webview)
        val settings = webview.settings

        // ピンチイン・ピンチアウトを有効
        settings.setSupportZoom(true)

        // ビルトインズームコントロールを有効
        settings.setBuiltInZoomControls(true)

        // ズームボタンを非表示 ← ここが重要
        settings.setDisplayZoomControls(false)

        webview.webViewClient = WebViewClient()
        webview.loadUrl("https://example.com")
    }
}

2014年の実装 vs 2026年の実装

項目 2014年 2026年
フレームワーク View(XML + Java) Jetpack Compose(推奨)or View
API setBuiltInZoomControls() 同じ(廃止されていない)
非表示方法 リフレクション使用(廃止) setDisplayZoomControls(false)
コード行数 5~10行 Compose: 15行, View: 8行
セキュリティ 基本的 WebViewClient で制御強化可能
パフォーマンス 標準 Compose は仮想化対応

よくある落とし穴

1. setDisplayZoomControls() を設定し忘れ

❌ 悪い例:ズームボタンが表示される
settings.setSupportZoom(true)
settings.setBuiltInZoomControls(true)
// setDisplayZoomControls(false) がない!
✅ 正しい例:ズームボタンが非表示
settings.setSupportZoom(true)
settings.setBuiltInZoomControls(true)
settings.setDisplayZoomControls(false)

2. JavaScript が必要なサイトの場合

settings.apply {
    javaScriptEnabled = true  // ← 追加が必要な場合がある
    setSupportZoom(true)
    setBuiltInZoomControls(true)
    setDisplayZoomControls(false)
}

3. セキュリティ設定を忘れずに

settings.apply {
    // 安全でない HTTP を制限(Android 9+)
    setSupportZoom(true)
    setBuiltInZoomControls(true)
    setDisplayZoomControls(false)

    // 追加セキュリティ設定
    mixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW

    // ジオロケーション無効化
    setGeolocationEnabled(false)
}

webview.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {
        // URL をフィルタリング
        return false
    }
}

API レベル別の対応

API レベル サポート 対応方法
API 11+ setDisplayZoomControls(false) 推奨
API 19+ 同上
API 21+ 同上
API 29+ Jetpack Compose への移行を検討

実装チェックリスト

Jetpack Compose を使う場合

  • ☑ AndroidView でWebView をラップ
  • ☑ setSupportZoom(true)
  • ☑ setBuiltInZoomControls(true)
  • ☑ setDisplayZoomControls(false)
  • ☑ WebViewClient を設定
  • ☑ JavaScriptEnabled が必要か確認
  • ☑ セキュリティ設定(mixedContentMode など)

View 系を使う場合

  • ☑ WebView を XML レイアウトに配置
  • ☑ findViewById で取得
  • ☑ setSupportZoom(true)
  • ☑ setBuiltInZoomControls(true)
  • ☑ setDisplayZoomControls(false)
  • ☑ WebViewClient を設定
  • ☑ JavaScriptEnabled が必要か確認
  • ☑ セキュリティ設定(mixedContentMode など)

2026年への移行:Compose 推奨理由

【従来の View 系】

  • レガシーコード
  • テストしづらい
  • 状態管理が複雑

【Jetpack Compose】(推奨)

  • モダンなフレームワーク
  • テスト容易
  • 状態管理が簡潔
  • Android Studio の Compose Preview で動作確認可能

既に View 系で実装済みなら無理に移行は不要だが、新規プロジェクトなら Compose を検討する価値あり。


参考資料

2014/05/17

本を手に入れました。

意外と為になりますね。

アプリ内課金+広告 iPhone プログラミング







2014/05/02

Androidアプリのセキュア設計・セキュアコーディングガイド

メモ

後で読もう。

日本スマートフォンセキュリティ協会
Android Application Secure Design/Secure Coding Guidebook

・http://www.jssec.org/report/android_securecoding_en.html

http://www.jssec.org/dl/android_securecoding_en.pdf



2014/04/24

Beacon android のメモ

メモ

対応OSは4.3以上。

http://www.gaprot.jp/pickup/ibeacon/abeacon/

2014/04/15

この機能はいらない。

何かしら、内部の都合かと思うが♪
ログインしてこの画面が出ると
何も出来ないから辛い。

検索する時のコツ

皆さん、

googleで技術的な情報を調べる(検索)時はどうやってますか?

すごく、個人的な方法ですが、ちょっとお教えしたいと思います。

スマホ関連だと、すぐに情報が新しくなって、

せっかくソースコードのサンプルを見つけたけど、

最近のOSでは動かなかったりする事が多々あるかと思います。

android関連なら、

「android  (調べたい物) 2014」

見たいな感じで、年を入れると、最近の情報がヒットしやすいと思います。

是非、お試しください。

もっと良い方法があれば教えて下さい。


android開発環境構築(Win版)

androidアプリの開発環境構築(Win版)

一番てっとり速い方法 !!

android公式サイトからDLする。
EclipseのADTが設定済みの物がすでにアップされているのでそれを利用した方が良い。

ネットで調べると古いのが多いから、

未だに、Eclipseの公式サイトからダウンロードして

設定している人が大勢いると思うんだ。

まぁ悪い事では無いけど。

Eclipseの日本語化はまたの機会に。

お急ぎの方は、

「Eclipse Pleiades」 で検索してみてください。

でも、Xcodeも日本語じゃないからいっその事、英語のままでってのも有りかな。