Android名前空間、たとえば R.layout.popup_menu_item_layout
(これは コードから参照 として)からレイアウトファイルを上書きしたいので、com.Android.internal.R.layout.popup_menu_item_layout
)。overrideと言うことで、フレームワークが所有するレイアウトよりも優先されるプロジェクトでxml
ファイルを宣言することを想定しています。
これはレイアウトの例にすぎないので、質問はsdk/platforms/Android-XX/data/res/layout
ディレクトリにある各レイアウトに関係することに注意してください。
tools:override
特定のリソースを上書きする 非文書化tools:override
タグが利用可能です。例については this の回答を参照してください。これは Design Support Library 、からの値を上書きしますnotfrom Android framework。
tools:override="true"
をレイアウトのルートタグに適用しても、効果はありません。
XMLレイアウト参照-refs.xml
this の投稿で説明されているように、refs.xml
ディレクトリの/values/
ファイルを次の内容で宣言します。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="layout" name="activity_main">@layout/activity_second</item>
</resources>
activity_second.xml
を使用すると、activity_main.xml
が参照されます。 Snackbar
のレイアウトを置き換えるためにこの手法を使用することを提案する an answer があります。
これも有効になりません。
Androidパッケージからレイアウトファイルをオーバーライド/置換する正当な方法はありますか?
これは古い質問であることはわかっていますが、ライブラリレイアウトを自分のレイアウトで上書きしたかったので、次のようにしました。
問題のレイアウトはdesign_bottom_navigation_item
Refs.xmlに以下を追加しました。
<resources xmlns:tools="http://schemas.Android.com/tools">
<item name="design_bottom_navigation_item" type="layout" tools:override="true">@layout/bottom_navigation_item</item>
</resources>
これには4つの部分があります。
これは、どのリソースタイプでもこの方法で実行できます。
あなたがやろうとしていることは何ですか?
メニューアイテムがどのように見えるかを置き換えるだけのアイデアであれば、以下を試すことができます:
MyMenuAdapter extends MenuAdapter
getView
メソッドをオーバーライドして、アダプターからビューを返します。それだけでは機能しません。
プロジェクト(任意のテクノロジ)でSDKを使用し、いくつかの動作を変更する必要がある場合は、このSDKを調整し、その後、このニュースカスタマイズバージョンでプロジェクトをコンパイルします。
実行時に変更しようとするのは良い考えではありません。
複数の問題に直面します(レトロな互換性、セキュリティトリガー、 [〜#〜]トレブル[〜#〜] 非互換性、依存関係の問題など)
もちろん、これらのソリューションはいずれもパブリックアプリには適用できません。