3

API レベル 18 をターゲットにしてアプリケーションをビルドすると、XML レイアウト ファイルで非常に奇妙なバグが発生します。API レベル 17 では発生しません。Android 4.3 デバイスでアプリケーションを実行していますが、バグはすべてのデバイスで持続します。 3 つのデバイス。

外観は次のとおりです。

API 17 (正しい):

API 17

API 18 (不正解):

API 18

私はStickyGridHeaders ライブラリを使用しています。以下が私のgetHeaderView()方法です。

@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
    RowItem holder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.seasons_row_header, parent, false);
        holder = new RowItem();
        holder.title = (TextView) convertView.findViewById(R.id.seasonTitle);
        holder.episodeCount = (TextView) convertView.findViewById(R.id.episodeCount);
        convertView.setTag(holder);
    } else {
        holder = (RowItem) convertView.getTag();
    }

    if (seasons.get(position).equals("00")) {
        holder.title.setText(R.string.stringSpecials);  
    } else {
        holder.title.setText(getString(R.string.showSeason) + " " + seasons.get(position));
    }

    int size = seasonEpisodeCount.get(Integer.valueOf(seasons.get(position)));
    holder.episodeCount.setText(size + " " + getResources().getQuantityString(R.plurals.episodes, size, size));

    convertView.setClickable(false);
    convertView.setFocusable(false);

    return convertView;
}

レイアウト XML ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#80000000"
    android:padding="@dimen/list_padding" >

    <TextView
        android:id="@+id/seasonTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="@dimen/list_padding"
        android:layout_toLeftOf="@+id/episodeCount"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textIsSelectable="false"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/episodeCount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/seasonTitle"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/seasonTitle"
        android:gravity="bottom"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textIsSelectable="false" />

</RelativeLayout>

他の誰かがここで何が起こっているかについての手がかりを持っていますか? API レベル 17 をターゲットにすると機能するのに、最新の API レベル (18) をターゲットにすると機能しないのは、非常に奇妙です。

アップデート:

Android 4.3 をターゲットとしてビジュアル レイアウト エディターで表示すると、次のようになります。

ビジュアル レイアウト エディター

4

3 に答える 3

2

私は自分で問題を解決することができました。

私が言ったように、私は StickyGridHeaders ライブラリを使用しており、アプリケーションでそれを参照しています。ライブラリは API レベル 17 を対象としていたようです。レベル 18 に変更し、アプリケーションをコンパイルして実行しました。大成功です。

結論:アプリケーションとライブラリが同じ API レベルをターゲットにしていることを確認してください。

于 2013-09-12T14:50:15.863 に答える
1

私も同じ問題を抱えています。私の経験では、交差した配置が問題の原因であることが示されています (TextView @+id/seasonTitleにはプロパティandroid:layout_toLeftOf="@+id/episodeCount"があります; TextView @+id/episodeCountにはプロパティandroid:layout_alignBottom="@があります) +id/seasonTitle"およびlayout_alignTop="@+id/seasonTitle" . レイアウトの 1 つがその子を正しく更新しません。配置を交差する Layout-XML の変更は防止され、この問題はなくなりました。

于 2014-01-21T14:52:22.863 に答える