blog

Weex での解決方法

Android\nAndroid で Weex にイベントを渡すには?\nHashMap & lt;\n文字列, オブジェクト & gt;\nhashMap = new HashMap();\n(...

Mar 21, 2020 · 5 min. read
シェア

Android

Android はどうやって Weex にイベントを渡すのですか?

 HashMap<String,Object> hashMap = new HashMap();
 hashMap.put("seatNum",tableNo);
 fireEvent("onSelectedSeat", hashMap);

Weex

プルアップで読み込み、プルダウンで更新

<template>
 <list class="list"
 offset-accuracy="100"
 show-scrollbar="false"
 loadmoreoffset="10"
 @loadmore="loadmore">
 <refresh
 v-if="pageRefresh"
 class="refresh">
 <hdl-indicator
 ref="hdlIndicator"
 @onrefresh="onrefresh"
 />
 </refresh>
 <cell v-for="(num,index) in lists" :key="index" class="cell">
 <div class="panel">
 <text class="text">{{ num }}</text>
 </div>
 </cell>
 </list>
</template>
<script>
const modal = weex.requireModule('modal')
export default {
 data () {
 return {
 pageRefresh: true,
 lists: ['A', 'B', 'C', 'D', 'E']
 }
 },
 methods: {
 loadmore () {
 modal.toast({
 message: 'ロードモアイベントをトリガーする
 })
 this.lists = this.lists.concat(this.lists)
 },
 onrefresh (event) {
 modal.toast({ message: 'ドロップダウン更新の })
 setTimeout(e => {
 this.pageRefresh = false
 }, 2000)
 }
 }
}
</script>
<style scoped>
 .panel {
 width: 600px;
 height: 300px;
 margin-left: 75px;
 margin-top: 35px;
 margin-bottom: 35px;
 flex-direction: column;
 justify-content: center;
 border-width: 2px;
 border-style: solid;
 border-color: rgb(162, 217, 192);
 background-color: rgba(162, 217, 192, 0.2);
 }
 .text {
 font-size: 88px;
 text-align: center;
 color: #41B883;
 }
</style>

注目してください:

公開ページでは、ドロップダウンの更新に少し問題があります。ドロップダウンの更新を削除すれば問題ありません。

weex ページが Android にイベントを送信する方法

weexendは以下のようにイベントを送信する。
 this.$refs.map.setSelectedAnnotationWithStoreInfo({
		latitude: res.hdlStoreLatitude, //  
		longitude: res.hdlStoreLongitude, //  
		address: data.address,
		name: data.storeName //ショップ名
	})
Android 
 @JSMethod
 public void setSelectedAnnotationWithStoreInfo(JSONObject jsonObject) {
 }
公式サイトの説明
https://..org/zh/guide/extend/extend-.html#component-%E6%89%A9%E5%B1%95

listテキストの幅を設定するには?

注:プルアップ・ローディングの効果を得るには、以下の2箇所を設定する必要があります。

1.ロードモアイベント

2、loadmoreoffset:公式サイトによると、loadmoreイベントがトリガーされなかった場合、loadmoreoffsetの値が設定されていない可能性が非常に高いです。

<template>
 <list class="list"
 offset-accuracy="100"
 show-scrollbar="false"
 loadmoreoffset="10"
 @loadmore="loadmore">
 <cell v-for="num in lists" class="cell">
 <div class="panel">
 <text class="text">{{ num }}</text>
 </div>
 </cell>
 </list>
</template>
<script>
const modal = weex.requireModule('modal')
export default {
 data () {
 return {
 lists: ['A', 'B', 'C', 'D', 'E']
 }
 },
 methods: {
 loadmore () {
 modal.toast({
 message: 'ロードモアイベントをトリガーする
 })
 this.lists = this.lists.concat(this.lists)
 }
 }
}
</script>
<style scoped>
 .panel {
 width: 600px;
 height: 300px;
 margin-left: 75px;
 margin-top: 35px;
 margin-bottom: 35px;
 flex-direction: column;
 justify-content: center;
 border-width: 2px;
 border-style: solid;
 border-color: rgb(162, 217, 192);
 background-color: rgba(162, 217, 192, 0.2);
 }
 .text {
 font-size: 88px;
 text-align: center;
 color: #41B883;
 }
</style>

WeexBug: Android と IOS でスタイルを設定した後のリストの挙動が異なります。

不敬

リストの親コンテナはフルスクリーンで、次に以下のようなスタイルでリストが設定され、理論的にはdipはフルスクリーンになりますが、実際には最後のデータはすべて表示されませんでした。

問題解決方法

1、空セルの末尾のリストで、空セルの高さを100pxに設定し、AndroidやIOSで完全に表示できるようにしました。

2、divに包まれた外側の層のリストに起因する、divが削除され、問題が解決されます。

Weex ページでページの高さを取得する方法 質問

インポート { Utils } from 'weex-ui'
const pageHeight = Utils.env.getPageHeight()

プロジェクトの中で、この方法にはいくつかの問題があります。

IOSは上記の方法で、画面の高さ-ナビゲーションバーの高さ-タイトルバーの高さとしてページの高さを取得します。

ページにdivをスタンプし、そのdivの高さを設定することで、この高さがIOSを取得する高さとなり、以下の実験から導き出すことができます:

<div class="test" />
.test {
 position: fixed;
 left: 0px;
 top: 0px;
 right:0px;
 bottom: 0px;
 height: 1202px;
 background-color: sandybrown;
}

レンダリング

次に、アンドワールフォンでページの高さを取得し、テストに設定します。

なぜこのようなことが起こるのでしょうか?

プロジェクトはシステムタイトルバーではなく、カスタムタイトルバーを使用しているため、上記の方法でページの高さを計算すると、タイトルバーの高さも追加されます。

解決策

IOS携帯電話では、上記の方法でページの高さを取得してください。

しかし、Android携帯の場合は、上記の方法でページの高さを取得し、タイトルバーの高さを差し引きます

indicatorコンポーネントの表示と非表示

QRコードの生成を実現するには、ネイティブを使用する必要があり、Android側は、Zxingの助けを借りて実装する必要があり、モジュールを介して実装する必要があります。

const CodeGenerator = weex.requireModule('xcode-generator')

インジケータコンポーネントの表示と非表示

ニーズと現象:

ページには、Silderコンポーネントとインジケータコンポーネントがあり、長いスクリーンショット機能を実行したいときは、インジケータコンポーネントを非表示にする必要があり、使用する方法は、v-ifとv-showを介してインジケータを表示または非表示に制御することですが、有効になりませんでした。

解決策

その後、スタイルを変更することでインジケータの表示/非表示を制御し、item-sizeの値を0または16pxに変更することでインジケータを表示することができます。

アイデアを広げること:

インジケータの 幅を 設定することで、インジケータの表示/非表示を切り替えることができます。

text

テキスト

1、テキストを改行するには?

テキストの幅を設定して完了です。

Read next

デモ例 - アクションインターフェースとカスタムHTMLページ

アクションクラスにはアノテーションがあり、アクションのメソッドにはアノテーションがあります。 アノテーションされたメソッドの設定は、開発ガイドのバックグラウンドメニューに表示され、呼び出すことができます。 戻り値の型は共通で、マップやリストを返すこともでき、json形式に変換されますが、他の型も可能です。 カタログはWEB上に生成されます。 ...

Mar 21, 2020 · 3 min read