2017-06-06 2 views
0

私はずっと長い間問題を取り組んできました。 ImageButtonにイメージをドロップすると、ボタンが非常に大きくなります。これを修正するために、TableLayoutにweightSumがあり、行にそれぞれ独自のlayout_weightがあるTableRayoutを作成しました。しかし、私は行を割り当てるどのくらいの重量に関係なく、イメージが爆発し、他のすべての行を圧縮します。言い換えれば、TableRowはそれらに割り当てられたlayout_weightを尊重しません。Androidスタジオ - 画像拡大ボタン(およびウェイトルールを解除しますか?)

以下、私はそれぞれ4,5,3,1の4つの行を持っています。 ImageButtonはlayout_weight = "3"の3行目にあります。しかし、わかるように、行はボタンイメージに合わせて展開されます。いずれにしても

Preview

私は、画面上に複数のボタンがある場合、これは大きな問題です。私はそれらを大きくすると考えている同じ正確なサイズの多くのボタンを作成したので、より大きなデバイスでうまくスケールされます。もう一度、問題は、ボタンの内側に収まるように縮小していないが、ボタンを展開して、プロセスのlayout_weightsをすべて破棄することです。

<?xml version="1.0" encoding="utf-8"?> 
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:weightSum="13" 
     android:background="@drawable/edit_users_view"> 

     <TableRow 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="4"/> 

     <TableRow 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="5"> 
      <ScrollView> 
       <!-- Figure out button first --> 
      </ScrollView> 
     </TableRow> 

     <TableRow 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="3"> 
      <ImageButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/selector_cancel_button"/> 

     </TableRow> 

     <TableRow 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1"> 
     </TableRow> 
</TableLayout> 

さらに、この問題は、イメージの保存方法の一部である可能性があります。私は全てを私のドロウアブルフォルダに保存しましたが、ミップマップフォルダの中には何も保存しませんでした。しかし、このキャンセルボタンをmipmap-mdpiフォルダに保存してImageButtonにロードしようとしましたが、効果はまったく同じでした。ミップマップフォルダはおそらくサイズではなく解像度を設定しますか?おそらく50個の画像/セレクタが内部にあるので、私はドロウアブルフォルダを展開しませんでした。あなたのImageButtonのための特定の濃度画素を設定し

enter image description here

答えて

0

問題は、1つの描画可能なサイズのボタンで1つのレイアウトサイズで作業していたことです。実際には、画面の密度が異なり、それぞれ異なるイメージが必要です。アンドロイドプログラミングの初心者にとっては、自分のプロジェクトフォルダが最初から「あったはずだった」ものに変身するのが分かります。下を見てください。

たとえば、androd:layout_weight = "1"は、レイアウト全体に対するレイアウトの重要性を指します。低いlayout_weightsを持つウィジェットまたはレイアウトは、layout_weightsの方が高いウィジェットまたはレイアウトよりも優先度が高くなります。私が知っている限り、weightSumとlayout_weightは関連していません。私がXMLの例であると思っていたようです。

enter image description here _

私は、異なるサイズの画像を作成し、最初の描画可能なフォルダが唯一の「セレクタ」のために使用されているそれぞれのフォルダにそれらを置きます。各フォルダには同じ画像があり、最後のフォルダよりもわずか80%小さい。 Androidは自動的に正しい画像を取得し、使用しているレイアウトプレビューに追加します。一度各フォルダのサイズのすべての画像を持っていた、私はファイルを圧縮し、アンドロイドスタジオにそれらを加えた。私はもはや私のプログラムをどの電話でも動かすことに問題はなかった。言い換えれば、私のボタンを使って作業する方がはるかに簡単でした。なぜなら、小型の電話機では物理的に大きすぎず、XLargeデバイスでは普通のサイズだったからです。

メモリ不足エラーが発生しても問題が解決しない場合は、manifest.xmlのヒープサイズを大きくすることができますが、ゲームを作成しない限り、必要ではありません。私は超小型プログラムでヒープを増やそうとしましたが、いくつかのデバイスでは速度の違いを見ることができました。本当に必要な場合を除いて、largeHeap = "true"を避けることです。

結論は、良いプログラムをしたい、ショートカットがありません。ピカソなどの図書館の学習にも時間がかかる。あなたの毒を選ぶ。

最後に、4つのレイアウトフォルダがあることがわかります。それぞれには独立してプログラムされたXMLファイルが含まれていて、各画面の密度がすべて同じように見えます。ここで正直であれば、ほとんどの場合、それぞれのXMLを少し変更してコピーして貼り付けていました。各フォルダー内でXMLファイルを作成するときは、ファイルに同じ名前を付けます。したがって、activityMain.xmlは4つすべてのフォルダに作成され、アプリケーションを実行するデバイスは、デバイスが画面の密度に適合するフォルダから正しいXMLレイアウトを選択します。実際には素晴らしい素晴らしい。

2
<ImageButton 
android:layout_width="XXdp" 
android:layout_height="XXdp" 
android:background="@drawable/selector_cancel_button"/> 

、それが拡大してから、それを制限します。

この回答はHACKとよく似ています。これを行う正しい方法は、すべての画面サイズに対してそれぞれ異なる画像を持つことです。

ldpi、mdpi、hdpi、xhpdi、xxhdpi、xxxhdpi。 Stackには、これを実現するためのオープンスレッドが複数あります。希望が役立ちます。

0

あなたがターゲットとしている最高解像度で画像をスライスすることをお勧めします。ターゲットとしている解像度が1080x1920であるとしましょう。この解像度でデザインされたスクリーンを入手し、このスクリーンデザインから実際のサイズの画像を取得します。それぞれのフォルダを "drawable-xxhdpi"とすると、1080x1920のように、それぞれの "drawable"に "mipmap"ではなく、そのイメージを置きます。引き出し可能なフォルダを使用して画像にアクセスしてください。その後、重量や固定サイズを使用する必要はありません。それは魅力のように動作します。

+0

私は実際には1つのドロウアブルフォルダしか持っていません - 私はdrawable-xxhdpi(と他のもの)を作成しなければならないと思います。しかし、もちろん、画像に読み込もうとしたときに電話機がクラッシュするという問題もありました。 このような感じです - 画面が小さくなればなるほど、画像が大きなファイルを読み込む可能性は低くなりますか?小さなスクリーンでは許されない、より大きな画面密度のためにリソースを確保していますか? – FoxDonut

+0

ええ、resにそのフォルダを作成する必要があります。いくつかの問題のためにアプリがクラッシュする必要があります。小さな画面で大きな画像を使用してもアプリがクラッシュすることはありません。 –

+0

1メガバイト未満の画像には18メガバイトを割り当てようとしています。これは本当に修正が必要なアンドロイドの問題です。 – FoxDonut

関連する問題