7

मेरे पास ऐसी स्थिति है जिसे मैं ठीक करने में सक्षम नहीं हूं, उम्मीद है कि मुझे आपकी कुछ सलाह मिल जाएगी।एंड्रॉइड में LinearLayout चिकनी में TextView खींचें कैसे करें?

स्थिति सरल है: मेरे पास एक रैखिक लयआउट है जिसमें मेरे पास टेक्स्ट की कई पंक्तियों के साथ टेक्स्ट व्यू है। जब तक वह अपनी पसंद की स्थिति नहीं पाता तब तक उपयोगकर्ता टेक्स्टव्यू को खींचने में सक्षम होता है। वास्तव में महत्वपूर्ण बात यह है कि टेक्स्ट व्यू आंशिक रूप से लीनियरलाउट से बाहर हो सकता है (यह कट दिखाई देगा)।

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top|center_horizontal" 
     android:clipChildren="false" 
     android:gravity="center_horizontal|center_vertical" 
     android:orientation="vertical" > 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textColor="@color/text_color" 
      android:textSize="16sp" /> 
    </LinearLayout> 

आप देख सकते हैं LinearLayout clipChildren है = पाठ की कटऑफ अनुमति देने के लिए झूठी:

यहाँ कुछ कोड नमूने हैं। आप देख सकते हैं मैं सभी लेआउट मानकों (ठीक है, छोड़ दिया, नीचे, ऊपर मार्जिन) निर्धारित किया है: TextView के लिए मैं एक स्पर्श श्रोता

txt.setOnTouchListener(new View.OnTouchListener() { 
      int initialX = 0; 
      int initialY = 0; 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getActionMasked()) { 
       case MotionEvent.ACTION_DOWN: 
        initialX = (int) event.getX(); 
        initialY = (int) event.getY(); 
        break; 
       case MotionEvent.ACTION_MOVE: 
          int currentX = (int) event.getX(); 
          int currentY = (int) event.getY(); 
          LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) txt.getLayoutParams(); 

          int left = lp.leftMargin + (currentX - initialX); 
          int top = lp.topMargin + (currentY - initialY); 
          int right = lp.rightMargin - (currentX - initialX); 
          int bottom = lp.bottomMargin - (currentY - initialY); 

          lp.rightMargin = right; 
          lp.leftMargin = left; 
          lp.bottomMargin = bottom; 
          lp.topMargin = top; 

          txt.setLayoutParams(lp); 
        break; 
       default: 
        break; 
       } 
       return true; 
      } 
     }); 

और यहाँ मेरी समस्या है निर्धारित किया है। ऐसा क्यों है ?

1) यदि मैं केवल बाएं/शीर्ष का उपयोग करता हूं तो ड्रैग चिकनी चाल है लेकिन पाठ कटौती के बजाय दाएं सीमा पर लपेटा जाता है। शायद 0 मार्जिन मूल्य के कारण।

2) यदि मैं सभी मार्जिन का उपयोग करता हूं, तो पाठ मुझे कटौती के रूप में कट जाता है, लेकिन आंदोलन चिकनी नहीं है, यह बस कुछ पिक्सेल के लिए कूदता है।

मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

2

ठीक है। यह अजीब है। प्रारंभिक एक के समान आकार के साथ एक और LinearLayout के अंदर TextView डालने से, सब कुछ चिकनी बनाता है। मुझे कोई जानकारी नहीं है की क्यों।