【问题标题】:How to create relative layout titanium tableViewRow for different android screen size?如何为不同的android屏幕尺寸创建相对布局钛tableViewRow?
【发布时间】:2012-11-12 10:21:14
【问题描述】:

我创建了简单的表格视图应用程序,在 tableViewRow 中显示一些数据.. 目前,我只使用固定测量这是我的代码:

    function addTableView(){
        var tableData = [];
        
        for (var i = 0; i<10; i++){
            var row = Ti.UI.createTableViewRow({
                className:'forumEvent', // used to improve table performance
                rowIndex:i, // custom property, useful for determining the row during events
                selectionStyle:0,
            });
            
            var checkBox = Ti.UI.createSwitch({
                style:Ti.UI.Android.SWITCH_STYLE_CHECKBOX,
                value:false,
                left:5
            }); 
            
            var lblField = Ti.UI.createLabel({
                realValue: 'Value',
                text:'Field : Value',
                font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
                color:'#222',
                top:5,
                left:80
            });
            
            var lblField2 = Ti.UI.createLabel({
                realValue: 'Value',
                text:'Field : Value',
                font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
                color:'#222',
                top:35,
                left:80
            });
            
            var lblField3 = Ti.UI.createLabel({
                realValue: 'Value',
                text:'Field : Value',
                font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
                color:'#222',
                top:65,
                left:80
            });
            
            row.add(checkBox);
            row.add(lblField);
            row.add(lblField2);
            row.add(lblField3);
            
            checkBox.addEventListener('click',function(e){
                alert(checkBox.toImage().width);
            });
            
            tableData.push(row);
        }
        
        var tempTable =  Titanium.UI.createTableView({
            data:tableData,
            editable: Titanium.Platform.osname === 'iphone' ? true : false,
            name:'Picking table'
        });
                
        return tempTable;
    }

在更大的屏幕上,它可以完美显示如下:

但是如果我将我的模拟器屏幕更改为 QVGA,它就不能像以前那样显示,像这样:

有谁知道如何创建相对布局,以便在小屏幕和大屏幕上都能完美显示?之前谢谢..

【问题讨论】:

    标签: javascript titanium titanium-mobile


    【解决方案1】:
    var _p = function(densityPixels) {
            return densityPixels * Ti.Platform.displayCaps.dpi / 160;
        }
    
    var logoView = Ti.UI.createView({
            backgroundImage : '/images/logo.png',
            top : _p(100),
            width : _p(200),
            height : _p(360)
        });
    

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      使用百分比肯定会有所帮助。但是您应该查看布局属性。 http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.View-property-layout

      您可以在行中添加 layout:'horizo​​ntal' 属性

              var row = Ti.UI.createTableViewRow({
                  className:'forumEvent', // used to improve table performance
                  rowIndex:i, // custom property, useful for determining the row during events
                  selectionStyle:0,
                  layout:'horizontal'
              });
      

      使用此属性集,对象将从左到右紧挨着堆叠。

      然后将三个标签放置在一个容器中,其中包含 layout:'vertical' 和一个较小的 left 属性以用于填充。另外,从标签中删除 left 属性(这将由父容器处理)

              var labelContainer = Ti.UI.createView({
                  layout:'vertical',
                  height:Ti.UI.SIZE,
                  width:Ti.UI.SIZE,
                  left:5 //adjust this accordingly
              })
      
              var lblField = Ti.UI.createLabel({
                  realValue: 'Value',
                  text:'Field : Value',
                  font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
                  color:'#222',
                  top:5,
      
              });
      
              var lblField2 = Ti.UI.createLabel({
                  realValue: 'Value',
                  text:'Field : Value',
                  font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
                  color:'#222',
                  top:5,
      
              });
      
              var lblField3 = Ti.UI.createLabel({
                  realValue: 'Value',
                  text:'Field : Value',
                  font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
                  color:'#222',
                  top:5,
      
              });
      
              labelContainer.add()
      
              row.add(checkBox);
              labelContainer.add(lblField);
              labelContainer.add(lblField2);
              labelContainer.add(lblField3);
              row.add(labelContainer);
      

      该行将直接在复选框旁边添加整个标签容器(将标签从上到下直接堆叠在彼此下方)。 TI.UI.SIZE 的 width 和 height 属性强制对象具有其子对象的宽度和高度。

      一旦我开始使用与 TI.UI.SIZE/Ti.UI.FILL 结合的布局属性(获取其父级的大小),布局变得更加容易:) 希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        不确定您正在使用什么,但您可以使用响应式设计技术很好地更改布局。

        看看这个链接: http://www.html5rocks.com/en/mobile/responsivedesign/

        我相信你会找到一些很好的技巧。

        【讨论】:

        • 嗨 HerrWalter.. 感谢您的回答.. 但现在,我正在使用钛移动来创建我的项目.. :) 但非常感谢您的快速响应.. 非常感谢 :)
        【解决方案5】:

        您可以使用百分比值来声明控件的宽度和高度。就像

        var checkBox = Ti.UI.createSwitch({
            style:Ti.UI.Android.SWITCH_STYLE_CHECKBOX,
            value:false,
            left:'2%'
        }); 
        
        var lblField = Ti.UI.createLabel({
            realValue: 'Value',
            text:'Field : Value',
            font:{fontFamily:'Arial', fontSize:DefaultFontSize, fontWeight:'normal'},
            color:'#222',
            top:5,
            left:'40%',
            width :'80%'
        });
        

        百分比测量对所有屏幕尺寸都有效,它会根据屏幕尺寸自动调整

        【讨论】:

        • 嗨Nandu ..感谢您的回答.. :) 除了使用百分比之外,我还有什么方法可以使用吗?因为例如,如果我在按钮宽度上使用百分比,当我将设备变为横向模式时它会拉伸.. 那么有什么建议吗?谢谢..
        猜你喜欢
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多