問題タブ [mongolian-vertical-script]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1165 参照

android - Resizing rotated child view in custom ViewGroup subclass

Background

I have a custom ViewGroup subclass that rotates and mirrors its child view. The purpose for this is to correctly display traditional Mongolian text.

I could put anything is this ViewGroup, but for my current project I am putting an EditText in it. (I was never successful in just rotating and mirroring the EditText directly. However, wrapping it in this custom view group does work.)

Problem

My problem is that when I try to resize the ViewGroup programmatically, its child view is not getting resized properly along with it. I would like the EditText to match the size of the parent ViewGroup so that it appears to be a single view.

MCVE

I made a new project to show the problem. The button increases the width of the ViewGroup (shown in red). The images show the project start (with everything working fine) and two width increments. The EditText is white and is not getting resized even though the width and height are set to match_parent

enter image description here

The full project code is below.

MongolViewGroup.java (Custom ViewGroup that rotates and mirrors its content)

MainActivity.java

activity_main.xml

0 投票する
7 に答える
11371 参照

android - EditText コンテキスト メニューを無効にする

EditText伝統的なモンゴル語の​​縦型を作っています。EditText回転した の内部にわずかに変更された を埋め込むことで、正常に実装できましたViewGroup。システム 1 は縦書きテキストをサポートしておらず、回転しても回転しないため、完全にカスタムのコンテキスト メニューを作成する必要がありますViewGroup。そのため、システム コンテキスト メニューを完全に無効にしたいと考えています。

これは、コピー/貼り付けなどを無効にしようとしているこれらの質問とは異なることに注意してください。

シミュレーターにはコンテキスト メニューが表示されませんが、Android 5.0.2 Xiaomi フォンには表示されます。

私が試してみました:

私はハッキングに対してオープンですが、デバイス間で一貫して動作する必要があります. Mark Murphy (Commons Guy)は、似たようなことをしようとしている別のユーザーへの返信として、次のように書いています。

答えを思いついたとしても、デバイスを超えて機能しないのではないかと思います。デバイス メーカーは、EditText 用に独自の「コンテキスト メニュー」を展開する傾向があり、そのコンテキスト メニューに項目を追加しようとする開発者の試みを無効にしています。そのコンテキスト メニューをブロックしようとすると、同様の結果になると思います。

私は運が悪いのでしょうか?

今考えられる唯一のことは、完全に書き直しTextViewEditTextゼロから作成することです (まあ、Android ソースを変更することによって)。私は似たようなことをした人を知っていますが、彼のコードはオープンソースではありません。この大きな一歩を踏み出す前に、Stack Overflow でもっと簡単な解決策を探してみたいと思います。

更新:過去 2 日間、ソース コードを変更しようとしてきましたがTextView、6 か月のプロジェクトのようです。相互に関連するクラスの塊です。別の解決策が必要ですが、アイデアがありません。

MVCE

これは、問題を再現するために私が考えることができる最も簡単な方法です。私の習慣から必要なものは何もありませんEditText。レイアウトはEditText、デフォルト プロジェクトの Hello World のTextView. 非推奨のメソッドを処理しないように、最小 API を 11 に変更しました。

シミュレーター (API 24 を実行) のコンテキスト メニューは、カーソル ハンドルをクリックすると表示されます (ロング クリックまたはダブル クリックでは表示されません)。ここに画像があります:

ここに画像の説明を入力

Android 5.0 を実行している Xiaomi MIUI 電話では、すべての状況 (カーソル ハンドルのクリック、長押し、ダブルクリック) でコンテキスト メニューが表示されます。

アップデート

Aritra Roy のソリューションは、シミュレーター、彼がテストした他のデバイス、および私のデバイスで動作しています。元の問題が解決されるため、彼の回答を受け入れました。唯一のマイナス面は、テキスト選択も無効になることです。

0 投票する
6 に答える
13660 参照

flutter - Flutter の縦書きウィジェット

TextDirectionのドキュメントには次のように書かれています。

Flutter は、右から左または左から右の書き込み方向を使用するかどうかにかかわらず、現在使用されている世界中の言語で記述されたアプリケーションのニーズに対応するように設計されています。Flutter は、縦書きテキストや犀形テキストなどの他の書字モードをサポートしていません。これらはコンピューター プログラムではめったに使用されないためです。(強調追加)

Flutter は縦書きテキストをサポートしていないだけでなく、将来的には正式にサポートされなくなります。これは初期の設計上の決定でした (ここここを参照)。

それでも、今日、縦書きのサポートは実際に使用されています。中国語と日本語の特定の用途に加えて、伝統的なモンゴル文字ではそれが必要です。このスクリプトは、内モンゴルのコンピューター プログラムで非常に一般的に使用されます ()。

上から下に書かれ、行は左から右に折り返されます。

ここに画像の説明を入力

さらに、絵文字と CJK 文字は、縦に表示されたときにその向きを保持します (絶対に必要というわけではありませんが、推奨されます)。以下の画像では、上の段落は現在の実装を示し、下の段落は正しい垂直レンダリングを示しています。

ここに画像の説明を入力

Flutter は垂直スクリプトをサポートしていないため、最初から実装する必要があります。実際のテキストのレイアウトと描画はすべてLibTxtを使用して Flutter エンジンで行われるため、それを変更することはできません。

上から下への垂直の Text ウィジェットを作成するには何が必要ですか?

アップデート

私はまだ答えを探しています。レミの答えは、1 行のテキストには適していますが、複数行のテキストには適していません。

私は現在、3つの異なる可能な解決策を研究しています:

  • RichText ウィジェットに似たカスタム StatelessWidget をサポートする RenderObject サブクラス (またはおそらくRenderParagraphサブクラス) を作成します。
  • CustomPaint ウィジェットを使用する
  • ListView (テキスト行ごとに 1 行)、テキスト ウィジェット、および WidgetSpans の複合ウィジェットを作成します。

これらのすべてには、テキストの測定、レイアウト、および行のリストの取得が含まれます。

別のアップデート

私は現在、RichText と RenderParagraph を模倣するカスタム ウィジェットとレンダリング オブジェクトの作成に傾倒しています。内部では、RenderParagraph は TextPainter を使用してテキストのレイアウトとペイントを行います。私の問題は、TextPainter が基礎となる Skia LibTxt ライブラリに密接に結合されていることです。ここで、実際のレイアウトとペイントがすべて行われます。デフォルトの ltr と rtl 以外にテキストを配置することは、大きな問題であることがわかっています。

さらに別のアップデート

受け入れられた回答は、この質問で提示した基準を満たしています。短期的なニーズに対応できると思います。テキスト スタイルの適用などについてはいくつか保留がありますが、さらにテストを行う必要があります。長期的には、カスタムのテキスト レイアウトとペイントを試してみるかもしれません。