2

私のアプリケーションでは、テキストのサイズとコンテンツが動的で、タッチを使用して移動できる TextView のオーバーレイがあります。目標は、オーバーレイをテキストと同じサイズにすることです。オーバーレイに WRAP_CONTENT を使用すると、テキストを含む LinearLayout がテキストの全幅に拡張されません。

この例では、Activity のコンテンツ ビューとオーバーレイとして同じレイアウトを読み込みます。MATCH_PARENT を使用すると、TextView 全体をオーバーレイに表示できますが、全幅に触れることができるため、オーバーレイをタッチ イベントに使用できなくなります。LinearLayout がなければ、幅いっぱいには拡張されません。この最大幅より小さい幅の場合、wrap_content は期待どおりに機能し、高さの場合、wrap_content は、テキストにさらに行を追加するときに、デバイスの高さ全体に対して期待どおりに機能します。

TextView または LinearLayout をテキストよりも広くせずに、TextView をテキストの全幅に拡張するにはどうすればよいですか?

例は次のようになります。 デモコードの結果

MainActivity.kt:

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

        val view = LayoutInflater.from(this).inflate(R.layout.activity_main, null)

        val params = WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
            0,
            PixelFormat.TRANSLUCENT
        )
        params.gravity = Gravity.START

        (getSystemService(WINDOW_SERVICE) as WindowManager).addView(view, params)
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#f66">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is a long test text. This is a long test text. This is a long test text. This is a long test text. This is a long test text. This is a long test text. "
        android:maxLines="1"
        android:background="#6f6" />
</LinearLayout>

(AndroidManifest.xml<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>では必須)

4

2 に答える 2