Android 벡터 드로어 블 앱 : srcCompat에 이미지가 표시되지 않음


80

Android kitkat에 벡터 이미지를 표시하기 위해 지원 라이브러리를 사용하고 있습니다. 에뮬레이터에서 내 앱을 테스트 할 때 이러한 이미지가 표시되지 않습니다. 나는 안드로이드 사탕과 위에 별도의 레이아웃을 만든 그리고 내가 사용하고 있기 때문에 생각 (완벽 workd src속성을 대신 srcCompat여기에 내가 usign 지원 라이브러리를 해요 코드입니다

<LinearLayout android:layout_alignParentBottom="true"
android:id="@+id/lake_detail"
android:background="@drawable/my_fishing_plan_footer_line"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="90dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout
            android:layout_marginRight="3dp"
            android:id="@+id/fire_logo"
            android:layout_width="20sp"
            android:layout_height="20sp">

            <ImageView
                android:tint="#d74313"
                app:srcCompat="@drawable/circle_icon"
                android:layout_width="30sp"
                android:layout_height="30sp" />

            <ImageView
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                app:srcCompat="@drawable/lauzaviete"
                android:layout_width="25dp"
                android:layout_height="25dp" />

        </RelativeLayout>

그리고 안드로이드 스튜디오 미리보기 창에 이미지가 보이기 때문에 이상합니다.


5
android.support.v7.widget.AppCompatImageView최신 지원 버전을 사용 하고 사용 하고 있는지 확인하십시오.
Jared Burrows

1
@Jared Burrows 감사합니다! 대답처럼 쓸 수 있겠습니까? 나는 그것을 받아들이고 싶다!
David

답변:


198

원래 답변

다음 과 같이 레이아웃 android.support.v7.widget.AppCompatImageView대신 사용하십시오 ImageView.

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">

  <android.support.v7.widget.AppCompatImageView
    android:tint="#d74313"
    app:srcCompat="@drawable/circle_icon"
    android:layout_width="30sp"
    android:layout_height="30sp" />

  <android.support.v7.widget.AppCompatImageView
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    app:srcCompat="@drawable/lauzaviete"
    android:layout_width="25dp"
    android:layout_height="25dp" />
</LinearLayout>

여기여기 에서 AppCompatImageView문서를 참조 하십시오 .app:srcCompat

또한 다음을 수행하십시오.

설정 build.gradle

android {
  defaultConfig {
    vectorDrawables {
      useSupportLibrary = true
    }
  }
}

문서 : https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html#com.android.build.gradle.internal.dsl.VectorDrawablesOptions : useSupportLibrary

당신의 확장 Activity과 함께AppCompatActivity

public final class MainActivity extends AppCompatActivity {    
  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
  }
}

를 사용할 때 app:srcCompat레이아웃에 올바른 선언이 있는지 확인하십시오.

<LinearLayout 
  ...
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">
  ...
</LinearLayout>

옵션 (경고 : 문서를 참조하십시오) : setCompatVectorFromResourcesEnabled당신의 Application클래스

public class App extends Application {

  @Override public void onCreate() {
    super.onCreate();

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}

문서 : https://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html#setCompatVectorFromResourcesEnabled(boolean)


2
supportLibVersion = '25 .0.1 '의 ImageView와 함께 작동하지 않는 이유는 무엇입니까?
toobsco42

1
@ toobsco42 당신이 보면 ImageView문서, developer.android.com/reference/android/widget/ImageView.html은 가지고 있지 않습니다 srcCompatAppCompatImageView수행합니다 developer.android.com/reference/android/support/v7/widget/...를 .
자레드 버로우

7
AppCompatImageView레이아웃에서 사용해야하는 이유 . 문서에 따르면 "레이아웃에서 ImageView를 사용할 때 자동으로 사용됩니다. 사용자 지정 뷰를 작성할 때이 클래스를 수동으로 사용해야합니다."
Ordon dec.

1
그것은 지금까지 가장 완벽한 대답입니다. 정말 고마워.
leoneboaventura

4
@JaredBurrows #JustForRecords android.support.v7.widget.AppCompatImageView에서 app : srcCompat 속성을 사용하는 경우 AppCompatActivity에서 활동을 확장 할 필요가 없습니다.
Ewoks

17

비슷한 문제가 있었고 Jared Burrows의 답변 에서 모든 단계를 수행 한 후에도 문제가 해결되지 않았습니다.

내 레이아웃 파일 내의 "app"네임 스페이스가 다음과 같이 설정되어있는 것으로 나타났습니다.

xmlns:app="http://schemas.android.com/tools"

대신에:

xmlns:app="http://schemas.android.com/apk/res-auto"

이것을 변경 한 후 문제가 수정되었습니다.


8

넣다 다른 사람이 문제로 실행 및 사용 androidx을 한 후 사용해보십시오 androidx.appcompat.widget.AppCompatImageView을


2
레이아웃에서 AppCompatImageView를 사용해야하는 이유는 무엇입니까? 문서에 따르면 "레이아웃에서 ImageView를 사용할 때 자동으로 사용됩니다. 사용자 지정 뷰를 작성할 때이 클래스를 수동으로 사용해야합니다."
S. Gissel

1
@ S.Gissel 음, 업데이트 된 버전을 사용하고있을 수 있습니다. 당시 나는 내 사건에 효과가 있었던 유일한 해결책이었던 이것을 시도했습니다
nada

2

요약하자면:

  1. 모듈 (build.gradle)에 벡터 드로어 블 지원 배치

    defaultConfig {           
         vectorDrawables.useSupportLibrary = true
     }
    
  2. android:src="@drawable/icon"사용 대신app:srcCompat="@drawable/icon"

  3. 확인 당신을 Activity extends AppCompatActivity이 단계없이하는 벡터 이미지를 표시 할 수 없습니다app:srcCompat


저도 마찬가지입니다. FragmentActivity를 확장했습니다. 설명을 추가해 주셔서 감사합니다!
Kulbir Saini

1

사용하다:

android:background="@drawable/circle_icon"

대신에:

app:srcCompat="@drawable/circle_icon"

1
이미지를 보여주기 때문에 답변을 고려할 수 있으므로 감사합니다! 나쁜 점은 사용자가 이미지를 터치해도 피드백을받을 수 없다는 것입니다.
Filipe Brito

1
사실 그것은 피해야합니다.
CoXier

1

구현하고 app:srcCompact다음에서 사용할 수 있습니다.ImageView

implementation 'com.android.support:appcompat-v7:28.0.0'

올바른 버전을 구현했는지 확인하십시오.

그런 다음 build.gradle세트에서android.defaultConfig.vectorDrawables.useSupportLibrary = true

defaultConfig {

    //...

    vectorDrawables {
        useSupportLibrary true
    }
}

1

문제는 내 코드에서도 발생했습니다. 솔루션 : Android가 Androidx Artifacts로 업그레이드함에 따라 Regular 대신 사용했고 제대로 작동했습니다!


0

추가로 벡터 드로어 블 drawabledrawable-anydpi.

그래픽이 drawable-anydpi폴더 에 있으면 종종 문제가 발생 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.