Xamarin Android ผูกและใช้ไลบรารี Java ใน Visual Studio

ฉันต้องการเพิ่มไลบรารีปุ่มการกระทำแบบลอยตัวจาก github ในโครงการ Visual Studio ของฉัน: https://github.com/Clans/FloatingActionButton

ฉันติดตามคำอธิบายนี้โดยแนะนำให้เพิ่ม Binding Library (Android) (https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar/)

ฉันลองเชื่อมโยงด้วยไฟล์ .jar และ .aar ดูเหมือนว่าไฟล์จะโอเค แต่ในระหว่างการนำเข้า ฉันได้รับข้อยกเว้นดังต่อไปนี้:

BINDINGSGENERATOR : warning BG8601: No packages found

OR

JARTOXML : warning J2X9001: Couldn't load class com/github/clans/fab/FloatingActionButton$1 : java.lang.NoClassDefFoundError: android/view/ViewOutlineProvider

ความช่วยเหลือใด ๆ ที่ชื่นชม


person CreateAHero    schedule 20.04.2016    source แหล่งที่มา


คำตอบ (2)


ในขณะที่คำตอบของ SushiHangovers นั้นถูกต้องในแง่ของการผูกมัดของคุณเอง หากคุณต้องการใช้ไลบรารีปุ่มการดำเนินการแบบลอยตัวของ Clans คุณสามารถติดตั้ง FAB.XamarinAndroid ได้อย่างง่ายดาย ผ่าน nuget ซึ่งได้ทำการเชื่อมโยงไลบรารีนี้ให้กับคุณแล้ว

แก้ไข

ที่เก็บ GitHub ซึ่งคุณสามารถดูวิธีจัดโครงสร้างโปรเจ็กต์การเชื่อมโยงได้

person Plac3Hold3r    schedule 20.04.2016

(นั่นคือหนึ่งในการเข้าเล่มที่สะอาดที่สุดที่ฉันเคยทำ โดยปกติแล้วคุณจะจบลงด้วยการเปลี่ยนแปลงมากมาย...)

  • เริ่มต้นจากศูนย์ และสร้าง Xamarin.Android โซลูชัน/โปรเจ็กต์ใหม่ผ่านเทมเพลต

  • เพิ่มโปรเจ็กต์ Android Library Binding ให้กับโซลูชันของคุณ

  • เพิ่ม fab-1.6.3.aar ไปยังโฟลเดอร์ Jars:

(ฉันใช้ ลิงก์โดยตรงไปยัง Maven Central อยู่ในไซต์โครงการ Github)

หมายเหตุ: ตรวจสอบให้แน่ใจว่า .arr ถูกแฟล็กเป็นการดำเนินการ build ของ LibraryProjectZip หลังจากเพิ่มแล้ว

สร้างโปรเจ็กต์ Binding คุณควรได้รับคำเตือนเกี่ยวกับการแทนที่แต่ไม่มีข้อผิดพลาด

  • ไปที่โปรเจ็กต์แอป Xamarin.Android หลักของคุณและเพิ่มการอ้างอิงไปยังโปรเจ็กต์ที่เชื่อมโยง

  • เปิดไฟล์ Resources/Layout/Main.axml ของคุณ และแทนที่เนื้อหา:


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fab="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <com.github.clans.fab.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginBottom="8dp"
        android:layout_marginRight="8dp"/>
</FrameLayout>
  • สร้างและรันบนอีมูเลเตอร์ของคุณ ยังไม่เซ็กซี่นักเนื่องจากไม่มีโค้ดที่เติมอะไรเลยแต่ใช้งานได้:

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: ฉันดำเนินการต่อและนำเข้าทรัพยากร ทั้งหมด จากตัวอย่าง GitHub ไม่เช่นนั้นคุณจะพบข้อผิดพลาดในการคอมไพล์มากมายเกี่ยวกับทรัพยากรที่ขาดหายไป หากคุณเริ่มทำงานกับเค้าโครงและโค้ด xml ตัวอย่างของพวกเขา

FloatingActionButton/sample/src/main/res:
anim            drawable-xxhdpi     mipmap-xhdpi
drawable        drawable-xxxhdpi    mipmap-xxhdpi
drawable-hdpi       layout          values
drawable-mdpi       menu            values-v21
drawable-v21        mipmap-hdpi     values-w820dp
drawable-xhdpi      mipmap-mdli

และแปลงโค้ด Java เพียงพอสำหรับ MainActivity OnCreate และ Fragments เพื่อทดสอบและทุกอย่างใช้งานได้ที่ฉันลอง:

ป้อนคำอธิบายรูปภาพที่นี่

person SushiHangover    schedule 20.04.2016
comment
ฉันลองวิธีแก้ปัญหาของคุณแล้วและไปได้ไกลกว่านี้อีกเล็กน้อย --> มันคอมไพล์ตอนนี้โดยไม่มีข้อยกเว้น น่าเสียดายที่ระหว่างการดำเนินการฉันได้รับข้อยกเว้นต่อไปนี้: เกิดจาก: java.lang.ClassNotFoundException: ไม่พบคลาส com.github.clans.fab.FloatingActionButton - person CreateAHero; 21.04.2016
comment
คุณได้เพิ่มโปรเจ็กต์ Android Library Binding ลงในแอป Android หลักของคุณเป็นข้อมูลอ้างอิงโปรเจ็กต์หรือไม่ - person SushiHangover; 21.04.2016
comment
ใช่ ฉันทำตามคำแนะนำของคุณแล้ว มันแปลกนิดหน่อย - ไฟล์อย่างเป็นทางการจากการสาธิต Xamarin ใช้งานได้ developer.xamarin.com/guides /android/advanced_topics/ (textanalyzer.aar) - person CreateAHero; 21.04.2016
comment
@CreateAHero np ดีใจที่เห็นว่าคุณใช้งานได้ผ่านเวอร์ชัน Nuget - person SushiHangover; 22.04.2016